summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIonel Cristian Mărieș <contact@ionelmc.ro>2014-02-08 18:28:42 +0200
committerIonel Cristian Mărieș <contact@ionelmc.ro>2014-02-08 18:28:42 +0200
commitaf3791ea946771f232f6c71abb82c85d9f4ef3a5 (patch)
tree90b0f7e94d9542024d1dbee8176e135381353a3c
parent6a3e05526827f28b507d73cbf1ab016442315098 (diff)
downloadkombu-fix-celery-1847.tar.gz
Don't read from the socket more than requested. This prevents stalling issues (fixes celery/celery#1847).fix-celery-1847
-rw-r--r--kombu/transport/amqplib.py11
1 files changed, 6 insertions, 5 deletions
diff --git a/kombu/transport/amqplib.py b/kombu/transport/amqplib.py
index 14937d6e..fff82a1f 100644
--- a/kombu/transport/amqplib.py
+++ b/kombu/transport/amqplib.py
@@ -52,19 +52,20 @@ class TCPTransport(transport.TCPTransport):
'Framing Error, received 0x%02x while expecting 0xce' % ch)
def _read(self, n, initial=False):
- while len(self._read_buffer) < n:
+ read_buffer = self._read_buffer
+ while len(read_buffer) < n:
try:
- s = self.sock.recv(65536)
+ s = self.sock.recv(n - len(read_buffer))
except socket.error as exc:
if not initial and exc.errno in (errno.EAGAIN, errno.EINTR):
continue
raise
if not s:
raise IOError('Socket closed')
- self._read_buffer += s
+ read_buffer += s
- result = self._read_buffer[:n]
- self._read_buffer = self._read_buffer[n:]
+ result = read_buffer[:n]
+ self._read_buffer = read_buffer[n:]
return result