On Fri, 2009-09-11 at 12:35 +0200, Johan Euphrosine wrote: > > self._packet_queue is not empty > -> flushLongPollDeferred set _longpoll_deferred to None > -> longpollDeferred returns self._longpoll_deferred (None) > -> handlePacketDefer returns self.longpollDeferred() (None) > -> *CRASH* > > Will work on a testcase to reproduce this issue.
I believe the attached patch should correct this issue. -- Johan Euphrosine <pro...@aminche.com>
Index: pokernetwork/pokeravatar.py =================================================================== --- pokernetwork/pokeravatar.py (revision 6222) +++ pokernetwork/pokeravatar.py (working copy) @@ -346,8 +346,7 @@ def longpollDeferred(self): self._longpoll_deferred = defer.Deferred() - self.flushLongPollDeferred() - return self._longpoll_deferred + return self.flushLongPollDeferred() def blockLongPollDeferred(self): self._block_longpoll_deferred = True @@ -359,13 +358,19 @@ def flushLongPollDeferred(self): if self._block_longpoll_deferred == False and self._longpoll_deferred and len(self._packets_queue) > 0: packets = self.resetPacketsQueue() + if self.service.verbose > 3: + self.message("flushLongPollDeferred(%s): " % str(packets)) d = self._longpoll_deferred self._longpoll_deferred = None d.callback(packets) + return d + return self._longpoll_deferred def longPollReturn(self): if self._longpoll_deferred: packets = self.resetPacketsQueue() + if self.service.verbose > 3: + self.message("longPollReturn(%s): " % str(packets)) d = self._longpoll_deferred self._longpoll_deferred = None d.callback(packets) Index: tests/test-pokeravatar.py.in =================================================================== --- tests/test-pokeravatar.py.in (revision 6222) +++ tests/test-pokeravatar.py.in (working copy) @@ -4007,6 +4007,21 @@ return d d.addCallback(handleLongPollReturn) return d + # ------------------------------------------------------------------------ + def test87_flushLongPollDeferred(self): + self.createClients(1) + d = self.client_factory[0].established_deferred + d.addCallback(self.setupCallbackChain) + d.addCallback(self.login, 0) + d.addCallback(self.joinTable, 0, 2, 'Table2', '2-4-limit') + def handleLongPoll(x): + avatar = self.service.avatars[0] + avatar._packets_queue = ['foo'] + d = avatar.handlePacketDefer(PacketPokerLongPoll()) + self.assertNotEquals(None, d) + return d + d.addCallback(handleLongPoll) + return d ############################################################################## class PokerAvatarNoClientServerTestCase(unittest.TestCase):
signature.asc
Description: This is a digitally signed message part
_______________________________________________ Pokersource-users mailing list Pokersource-users@gna.org https://mail.gna.org/listinfo/pokersource-users