Skip to content

Commit 2d112ce

Browse files
authored
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 <kj.gowrima@gmail.com> Backported from c21d37f
1 parent e2eb9d2 commit 2d112ce

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

zookeeper-client/zookeeper-client-c/src/zookeeper.c

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3139,10 +3139,9 @@ static int queue_session_event(zhandle_t *zh, int state)
31393139
}
31403140
//#endif
31413141

3142-
completion_list_t *dequeue_completion(completion_head_t *list)
3143-
{
3142+
completion_list_t *dequeue_completion_nolock(completion_head_t *list) {
3143+
31443144
completion_list_t *cptr;
3145-
lock_completion_list(list);
31463145
cptr = list->head;
31473146
if (cptr) {
31483147
list->head = cptr->next;
@@ -3151,6 +3150,14 @@ completion_list_t *dequeue_completion(completion_head_t *list)
31513150
list->last = 0;
31523151
}
31533152
}
3153+
return cptr;
3154+
}
3155+
3156+
completion_list_t *dequeue_completion(completion_head_t *list)
3157+
{
3158+
completion_list_t *cptr;
3159+
lock_completion_list(list);
3160+
cptr = dequeue_completion_nolock(list);
31543161
unlock_completion_list(list);
31553162
return cptr;
31563163
}
@@ -3159,7 +3166,7 @@ completion_list_t *dequeue_completion(completion_head_t *list)
31593166
static void cleanup_failed_multi(zhandle_t *zh, int xid, int rc, completion_list_t *cptr) {
31603167
completion_list_t *entry;
31613168
completion_head_t *clist = &cptr->c.clist;
3162-
while ((entry = dequeue_completion(clist)) != NULL) {
3169+
while ((entry = dequeue_completion_nolock(clist)) != NULL) {
31633170
// Fake failed response for all sub-requests
31643171
deserialize_response(zh, entry->c.type, xid, 1, rc, entry, NULL);
31653172
destroy_completion_entry(entry);
@@ -3174,7 +3181,7 @@ static int deserialize_multi(zhandle_t *zh, int xid, completion_list_t *cptr, st
31743181
assert(clist);
31753182
deserialize_MultiHeader(ia, "multiheader", &mhdr);
31763183
while (!mhdr.done) {
3177-
completion_list_t *entry = dequeue_completion(clist);
3184+
completion_list_t *entry = dequeue_completion_nolock(clist);
31783185
assert(entry);
31793186

31803187
if (mhdr.type == -1) {
@@ -4729,7 +4736,7 @@ int zoo_amulti(zhandle_t *zh, int count, const zoo_op_t *ops,
47294736
return ZUNIMPLEMENTED;
47304737
}
47314738

4732-
queue_completion(&clist, entry, 0);
4739+
queue_completion_nolock(&clist, entry, 0);
47334740
}
47344741

47354742
rc = rc < 0 ? rc : serialize_MultiHeader(oa, "multiheader", &mh);

0 commit comments

Comments
 (0)