Index: pokernetwork/pokeravatar.py
===================================================================
--- pokernetwork/pokeravatar.py	(revision 6407)
+++ pokernetwork/pokeravatar.py	(working copy)
@@ -1270,6 +1270,9 @@
         for table in self.tables.values():
             table.disconnectPlayer(self, self.getSerial())
         self.logout()
+        for key, restclient in self.game_id2rest_client.iteritems():
+            restclient.clearTimeout()
+        self.game_id2rest_client = {}
 
     def getUserInfo(self, serial):
         self.service.autorefill(serial)
Index: tests/test-pokeravatar.py.in
===================================================================
--- tests/test-pokeravatar.py.in	(revision 6407)
+++ tests/test-pokeravatar.py.in	(working copy)
@@ -3872,6 +3872,7 @@
         d.addCallback(self.setupCallbackChain)
         d.addCallback(self.login, 0)
         d.addCallback(self.joinTable, 0, 2, 'Table2', '2-4-limit')
+        PokerRestClient.DEFAULT_LONG_POLL_FREQUENCY = 0.1
         def handleDistributedPacket(x):
             avatar = self.service.avatars[0]
             self.service.packet2resthost = lambda packet: (('host', 11111, '/PATH'), 2)
@@ -3904,6 +3905,7 @@
         d.addCallback(self.sendExplain)                
         d.addCallback(self.login, 0)
         d.addCallback(self.joinTable, 0, 2, 'Table2', '2-4-limit')
+        PokerRestClient.DEFAULT_LONG_POLL_FREQUENCY = 0.1
         def handleDistributedPacket(x):
             avatar = self.service.avatars[0]
             self.service.packet2resthost = lambda packet: (('host', 11111, '/PATH'), 2)
@@ -3931,6 +3933,39 @@
         d.addCallback(handleDistributedPacket)
         return d
     # ------------------------------------------------------------------------
+    def test82_2_distributePacketDisconnect(self):
+        self.createClients(1)
+        d = self.client_factory[0].established_deferred
+        d.addCallback(self.sendExplain)                
+        d.addCallback(self.login, 0)
+        d.addCallback(self.joinTable, 0, 2, 'Table2', '2-4-limit')
+        PokerRestClient.DEFAULT_LONG_POLL_FREQUENCY = 0.1
+        def handleDistributedPacket(x):
+            avatar = self.service.avatars[0]
+            self.service.packet2resthost = lambda packet: (('host', 11111, '/PATH'), 2)
+            getOrCreateRestClient = avatar.getOrCreateRestClient
+            clients = {}
+            d = defer.Deferred()
+            def getOrCreateRestClientMockup(resthost, game_id):
+                clients[game_id] = getOrCreateRestClient(resthost, game_id)
+                clients[game_id].sendPacket = lambda packet, data: d
+                return clients[game_id]
+            avatar.getOrCreateRestClient = getOrCreateRestClientMockup
+            def disconnectAvatar(arg):
+                avatar.connectionLost('reason')
+                return arg
+            d.addCallback(disconnectAvatar)
+            r = avatar.handleDistributedPacket(None, PacketPing(), '{ "type": "PacketPing" }')
+            r.addCallback(lambda packets: self.assertEquals(PACKET_PING, packets[0].type))
+            r.addCallback(lambda arg: self.assertEquals({}, avatar.game_id2rest_client))
+            r.addCallback(lambda arg: self.assertEquals(None, clients[2].timer))
+            def f(x): PokerRestClient.DEFAULT_LONG_POLL_FREQUENCY = -1
+            r.addCallback(f)
+            d.callback([PacketPing()])
+            return d
+        d.addCallback(handleDistributedPacket)
+        return d
+    # ------------------------------------------------------------------------
     def test83_distributePacketNoGameId(self):
         self.createClients(1)
         d = self.client_factory[0].established_deferred
