Skip to content
Browse files

Avoid hanging forever when the socket goes away and the only thing we…

…'re doing is writing.

If the connection closed during a flush_outbound with pending data, we
were in some cases (asyncore-based) looping forever. Checking each
time we enter the loop gets us a sensible exception in these cases.
  • Loading branch information...
1 parent b1d1cbf commit 6114707e11eb99f2fb0a88bc9fa6ecb4fd835e99 @tonyg tonyg committed Nov 15, 2011
Showing with 4 additions and 0 deletions.
  1. +4 −0 pika/asyncore_adapter.py
View
4 pika/asyncore_adapter.py
@@ -54,6 +54,7 @@
from heapq import heappush, heappop
from errno import EAGAIN
import pika.connection
+from pika.exceptions import *
class RabbitDispatcher(asyncore.dispatcher):
def __init__(self, connection):
@@ -108,6 +109,9 @@ def disconnect_transport(self):
def flush_outbound(self):
while self.outbound_buffer:
+ if self.connection_close:
+ # The connection was closed while we weren't looking!
+ raise ConnectionClosed(self.connection_close)
self.drain_events()
def drain_events(self):

0 comments on commit 6114707

Please sign in to comment.
Something went wrong with that request. Please try again.