diff options
author | Ionel Cristian Mărieș <contact@ionelmc.ro> | 2014-02-08 18:28:42 +0200 |
---|---|---|
committer | Ionel Cristian Mărieș <contact@ionelmc.ro> | 2014-02-08 18:28:42 +0200 |
commit | af3791ea946771f232f6c71abb82c85d9f4ef3a5 (patch) | |
tree | 90b0f7e94d9542024d1dbee8176e135381353a3c | |
parent | 6a3e05526827f28b507d73cbf1ab016442315098 (diff) | |
download | kombu-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.py | 11 |
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 |