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):

Attachment: 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

Reply via email to