浏览代码

ZOOKEEPER-1493. C Client: zookeeper_process doesn't invoke completion callback if zookeeper_close has been called (Michi Mutsuzaki via phunt and mahadev)

git-svn-id: https://svn.apache.org/repos/asf/zookeeper/branches/branch-3.3@1366786 13f79535-47bb-0310-9956-ffa450edef68
Patrick D. Hunt 13 年之前
父节点
当前提交
01c66227ce
共有 2 个文件被更改,包括 7 次插入5 次删除
  1. 4 0
      CHANGES.txt
  2. 3 5
      src/c/src/zookeeper.c

+ 4 - 0
CHANGES.txt

@@ -33,6 +33,10 @@ BUGFIXES:
   ZOOKEEPER-1521. LearnerHandler initLimit/syncLimit problems
     specifying follower socket timeout limits (phunt)
 
+  ZOOKEEPER-1493. C Client: zookeeper_process doesn't invoke
+    completion callback if zookeeper_close has been called
+    (Michi Mutsuzaki via phunt and mahadev)
+
 IMPROVEMENTS:
 
   ZOOKEEPER-1454. Document how to run autoreconf if cppunit is

+ 3 - 5
src/c/src/zookeeper.c

@@ -1949,11 +1949,9 @@ int zookeeper_process(zhandle_t *zh, int events)
             completion_list_t *cptr = dequeue_completion(&zh->sent_requests);
 
             /* [ZOOKEEPER-804] Don't assert if zookeeper_close has been called. */
-            if (zh->close_requested == 1) {
-                if (cptr) {
-                    destroy_completion_entry(cptr);
-                    cptr = NULL;
-                }
+            if (zh->close_requested == 1 && cptr == NULL) {
+                LOG_DEBUG(("Completion queue has been cleared by zookeeper_close()"));
+                close_buffer_iarchive(&ia);
                 return api_epilog(zh,ZINVALIDSTATE);
             }
             assert(cptr);