http://hg.viff.dk/viff/rev/3171ea9886cb
changeset: 1181:3171ea9886cb
user:      Marcel Keller <[email protected]>
date:      Wed May 13 17:07:00 2009 +0200
summary:   Seperate incoming data and waiting deferreds.

diffstat:

1 file changed, 8 insertions(+), 5 deletions(-)
viff/runtime.py |   13 ++++++++-----

diffs (48 lines):

diff -r b44882c6d4f6 -r 3171ea9886cb viff/runtime.py
--- a/viff/runtime.py   Wed May 13 16:38:16 2009 +0200
+++ b/viff/runtime.py   Wed May 13 17:07:00 2009 +0200
@@ -270,6 +270,7 @@
         self.lost_connection = Deferred()
         #: Data expected to be received in the future.
         self.incoming_data = {}
+        self.waiting_deferreds = {}
 
     def connectionMade(self):
         self.sendString(str(self.factory.runtime.id))
@@ -312,13 +313,14 @@
 
                 key = (program_counter, data_type)
 
-                deq = self.incoming_data.setdefault(key, deque())
-                if deq and isinstance(deq[0], Deferred):
+                if key in self.waiting_deferreds:
+                    deq = self.waiting_deferreds[key]
                     deferred = deq.popleft()
                     if not deq:
-                        del self.incoming_data[key]
+                        del self.waiting_deferreds[key]
                     deferred.callback(data)
                 else:
+                    deq = self.incoming_data.setdefault(key, deque())
                     deq.append(data)
             except struct.error, e:
                 self.factory.runtime.abort(self, e)
@@ -637,15 +639,16 @@
         pc = tuple(self.program_counter)
         key = (pc, data_type)
 
-        deq = self.protocols[peer_id].incoming_data.setdefault(key, deque())
-        if deq and not isinstance(deq[0], Deferred):
+        if key in self.protocols[peer_id].incoming_data:
             # We have already received some data from the other side.
+            deq = self.protocols[peer_id].incoming_data[key]
             data = deq.popleft()
             if not deq:
                 del self.protocols[peer_id].incoming_data[key]
             deferred.callback(data)
         else:
             # We have not yet received anything from the other side.
+            deq = self.protocols[peer_id].waiting_deferreds.setdefault(key, 
deque())
             deq.append(deferred)
 
     def _exchange_shares(self, peer_id, field_element):
_______________________________________________
viff-commits mailing list
[email protected]
http://lists.viff.dk/listinfo.cgi/viff-commits-viff.dk

Reply via email to