Browse Source

Deadlock on inqueue close (#4185) (#4997)

* remove read socket from thread hub on queue close

* removed socket for queue reader
Joshua Engelman 6 years ago
parent
commit
21baef53c3
1 changed files with 2 additions and 1 deletions
  1. 2 1
      celery/concurrency/asynpool.py

+ 2 - 1
celery/concurrency/asynpool.py

@@ -737,10 +737,10 @@ class AsynPool(_pool.Pool):
                     fileno_to_inq.pop(fd, None)
                     active_writes.discard(fd)
                     all_inqueues.discard(fd)
-                    hub_remove(fd)
             except KeyError:
                 pass
         self.on_inqueue_close = on_inqueue_close
+        self.hub_remove = hub_remove
 
         def schedule_writes(ready_fds, total_write_count=[0]):
             # Schedule write operation to ready file descriptor.
@@ -1246,6 +1246,7 @@ class AsynPool(_pool.Pool):
             if queue:
                 for sock in (queue._reader, queue._writer):
                     if not sock.closed:
+                        self.hub_remove(sock)
                         try:
                             sock.close()
                         except (IOError, OSError):