[Gd-chatter] r11044 - trunk/libraries/gui-sniffer

hannes at gwydiondylan.org hannes at gwydiondylan.org
Sat Dec 9 16:39:56 CET 2006


Author: hannes
Date: Sat Dec  9 16:39:54 2006
New Revision: 11044

Modified:
   trunk/libraries/gui-sniffer/gui-sniffer.dylan
Log:
Bug:7299
lock access to frame lists

Modified: trunk/libraries/gui-sniffer/gui-sniffer.dylan
==============================================================================
--- trunk/libraries/gui-sniffer/gui-sniffer.dylan	(original)
+++ trunk/libraries/gui-sniffer/gui-sniffer.dylan	Sat Dec  9 16:39:54 2006
@@ -2,6 +2,7 @@
 Author:    Andreas Bogk, Hannes Mehnert
 Copyright: (C) 2005, 2006,  All rights reserved. Free for non-commercial use.
 
+define constant $packet-list-lock = make(<lock>);
 define method frame-children-predicate (frame :: <leaf-frame>)
   #f
 end;
@@ -240,20 +241,22 @@
 end;
 
 define function filter-packet-table (frame :: <gui-sniffer-frame>)
-  let shown-packets
-    = if (frame.filter-expression)
-        choose-by(rcurry(matches?, frame.filter-expression),
-                  map(real-frame, frame.network-frames),
-                  frame.network-frames)
-      else
-        frame.network-frames
-      end;
-  unless (shown-packets = gadget-items(frame.packet-table))
-    gadget-items(frame.packet-table) := #();
-    do(method(x)
-         add-item(frame.packet-table, make-item(frame.packet-table, x))
-       end, shown-packets);
-    show-packet(frame);
+  with-lock($packet-list-lock)
+    let shown-packets
+      = if (frame.filter-expression)
+          choose-by(rcurry(matches?, frame.filter-expression),
+                    map(real-frame, frame.network-frames),
+                    frame.network-frames)
+        else
+          frame.network-frames
+        end;
+    unless (shown-packets = gadget-items(frame.packet-table))
+      gadget-items(frame.packet-table) := #();
+      do(method(x)
+           add-item(frame.packet-table, make-item(frame.packet-table, x))
+         end, shown-packets);
+      show-packet(frame);
+    end;
   end;
 end;
 
@@ -868,9 +871,11 @@
   unless (node.first-packet-arrived)
     node.first-packet-arrived := frame-with-meta.receive-time;
   end;
-  add!(node.network-frames, frame-with-meta);
-  if (~ node.filter-expression | matches?(frame, node.filter-expression))
-    add-item(node.packet-table, make-item(node.packet-table, frame-with-meta))
+  with-lock($packet-list-lock)
+    add!(node.network-frames, frame-with-meta);
+    if (~ node.filter-expression | matches?(frame, node.filter-expression))
+      add-item(node.packet-table, make-item(node.packet-table, frame-with-meta))
+    end;
   end;
 end;
 



More information about the chatter mailing list