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