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