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 <[email protected]>
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 [email protected] https://mail.gna.org/listinfo/pokersource-users
