浏览代码

Bug in TaskPool: The semaphore was released both at ACK and result ready.

Ask Solem 14 年之前
父节点
当前提交
e379e13b89
共有 1 个文件被更改,包括 6 次插入6 次删除
  1. 6 6
      celery/concurrency/processes/pool.py

+ 6 - 6
celery/concurrency/processes/pool.py

@@ -329,6 +329,11 @@ class ResultHandler(PoolThread):
                 pass
 
         def on_ready(job, i, obj):
+            if putlock is not None:
+                try:
+                    putlock.release()
+                except ValueError:
+                    pass
             try:
                 cache[job]._set(i, obj)
             except KeyError:
@@ -361,14 +366,9 @@ class ResultHandler(PoolThread):
                     debug('result handler got sentinel')
                     break
 
-                if putlock is not None:
-                    try:
-                        putlock.release()
-                    except ValueError:
-                        pass
-
                 on_state_change(task)
 
+        # Notify waiting threads
         if putlock is not None:
             try:
                 putlock.release()