@@ -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)
31593166static 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