[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