From 77bf655e45507b1baa3ab021234aaaecb1730386 Mon Sep 17 00:00:00 2001 From: Forrest Voight Date: Wed, 14 Dec 2011 02:08:24 -0500 Subject: [PATCH] improved deferral.ReplyMatcher --- p2pool/util/deferral.py | 14 ++++++-------- 1 files changed, 6 insertions(+), 8 deletions(-) diff --git a/p2pool/util/deferral.py b/p2pool/util/deferral.py index d2115c8..4a5e1a5 100644 --- a/p2pool/util/deferral.py +++ b/p2pool/util/deferral.py @@ -1,7 +1,5 @@ from __future__ import division -import random - from twisted.internet import defer, reactor from twisted.python import failure, log @@ -44,19 +42,19 @@ class ReplyMatcher(object): def __call__(self, id): self.func(id) - uniq = random.randrange(2**256) df = defer.Deferred() def timeout(): - df, timer = self.map[id].pop(uniq) - df.errback(failure.Failure(defer.TimeoutError('in ReplyMatcher'))) + self.map[id].remove((df, timer)) if not self.map[id]: del self.map[id] - self.map.setdefault(id, {})[uniq] = (df, reactor.callLater(self.timeout, timeout)) + df.errback(failure.Failure(defer.TimeoutError('in ReplyMatcher'))) + timer = reactor.callLater(self.timeout, timeout) + self.map.setdefault(id, set()).add((df, timer)) return df def got_response(self, id, resp): if id not in self.map: return - for df, timer in self.map.pop(id).itervalues(): - timer.cancel() + for df, timer in self.map.pop(id): df.callback(resp) + timer.cancel() -- 1.7.1