This is an automated email from the ASF dual-hosted git repository.

kezhuw pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zookeeper.git


The following commit(s) were added to refs/heads/master by this push:
     new c21d37f28 ZOOKEEPER-4299: Use non lock completion list in zoo_amulti 
since it is not multithreaded
c21d37f28 is described below

commit c21d37f281983d62ee60ee2efc109563f3691da2
Author: Gowrima <kj.gowr...@gmail.com>
AuthorDate: Mon Aug 18 11:49:59 2025 -0700

    ZOOKEEPER-4299: Use non lock completion list in zoo_amulti since it is not 
multithreaded
    
    Reviewers: kezhuw
    Author: Gowrima
    Closes #2256 from Gowrima/ZOOKEEPER-4299
---
 zookeeper-client/zookeeper-client-c/src/zookeeper.c | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/zookeeper-client/zookeeper-client-c/src/zookeeper.c 
b/zookeeper-client/zookeeper-client-c/src/zookeeper.c
index ce7deb5e2..645510b14 100644
--- a/zookeeper-client/zookeeper-client-c/src/zookeeper.c
+++ b/zookeeper-client/zookeeper-client-c/src/zookeeper.c
@@ -3150,10 +3150,9 @@ error:
 }
 //#endif
 
-completion_list_t *dequeue_completion(completion_head_t *list)
-{
+completion_list_t *dequeue_completion_nolock(completion_head_t *list) {
+
     completion_list_t *cptr;
-    lock_completion_list(list);
     cptr = list->head;
     if (cptr) {
         list->head = cptr->next;
@@ -3162,6 +3161,14 @@ completion_list_t *dequeue_completion(completion_head_t 
*list)
             list->last = 0;
         }
     }
+    return cptr;
+}
+
+completion_list_t *dequeue_completion(completion_head_t *list)
+{
+    completion_list_t *cptr;
+    lock_completion_list(list);
+    cptr = dequeue_completion_nolock(list);
     unlock_completion_list(list);
     return cptr;
 }
@@ -3170,7 +3177,7 @@ completion_list_t *dequeue_completion(completion_head_t 
*list)
 static void cleanup_failed_multi(zhandle_t *zh, int xid, int rc, 
completion_list_t *cptr) {
     completion_list_t *entry;
     completion_head_t *clist = &cptr->c.clist;
-    while ((entry = dequeue_completion(clist)) != NULL) {
+    while ((entry = dequeue_completion_nolock(clist)) != NULL) {
         // Fake failed response for all sub-requests
         deserialize_response(zh, entry->c.type, xid, 1, rc, entry, NULL);
         destroy_completion_entry(entry);
@@ -3185,7 +3192,7 @@ static int deserialize_multi(zhandle_t *zh, int xid, 
completion_list_t *cptr, st
     assert(clist);
     deserialize_MultiHeader(ia, "multiheader", &mhdr);
     while (!mhdr.done) {
-        completion_list_t *entry = dequeue_completion(clist);
+        completion_list_t *entry = dequeue_completion_nolock(clist);
         assert(entry);
 
         if (mhdr.type == -1) {
@@ -4740,7 +4747,7 @@ int zoo_amulti(zhandle_t *zh, int count, const zoo_op_t 
*ops,
                 return ZUNIMPLEMENTED;
         }
 
-        queue_completion(&clist, entry, 0);
+        queue_completion_nolock(&clist, entry, 0);
     }
 
     rc = rc < 0 ? rc : serialize_MultiHeader(oa, "multiheader", &mh);

Reply via email to