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

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


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

commit 2d112ce5ce3ab14d9cd79263cb4f37cd2f7f3adc
Author: jmalopoy <[email protected]>
AuthorDate: Tue Mar 31 08:36:39 2026 +0200

    ZOOKEEPER-4299: Use non lock completion list in zoo_amulti since it is not 
multithreaded (#2353)
    
    Reviewers: kezhuw
    Author: Gowrima
    Closes #2256 from Gowrima/ZOOKEEPER-4299
    
    Co-authored-by: Gowrima <[email protected]>
    
    Backported from c21d37f281983d62ee60ee2efc109563f3691da2
---
 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 0ade9d65b1..2b0d62455f 100644
--- a/zookeeper-client/zookeeper-client-c/src/zookeeper.c
+++ b/zookeeper-client/zookeeper-client-c/src/zookeeper.c
@@ -3139,10 +3139,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;
@@ -3151,6 +3150,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;
 }
@@ -3159,7 +3166,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);
@@ -3174,7 +3181,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) {
@@ -4729,7 +4736,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