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);