[ https://issues.apache.org/jira/browse/ZOOKEEPER-4299?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kezhu Wang updated ZOOKEEPER-4299: ---------------------------------- Summary: Use non lock completion list in zoo_amulti since it is not multithreaded (was: List head do not initialize before using it in zoo_amulti that will cause segment errors.) > Use non lock completion list in zoo_amulti since it is not multithreaded > ------------------------------------------------------------------------ > > Key: ZOOKEEPER-4299 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-4299 > Project: ZooKeeper > Issue Type: Improvement > Components: c client > Reporter: hong > Assignee: Gowrima > Priority: Minor > Labels: pull-request-available > Original Estimate: 2h > Time Spent: 1h > Remaining Estimate: 1h > > int zoo_amulti(zhandle_t *zh, int count, const zoo_op_t *ops, > zoo_op_result_t *results, void_completion_t completion, const void *data) > { struct RequestHeader h = \\{get_xid(), ZOO_MULTI_OP} > ; > struct MultiHeader mh = \{-1, 1, -1}; > struct oarchive *oa = create_buffer_oarchive(); > {color:#ff0000}completion_head_t clist = \{ 0 }; // not initialize for cond > or lock{color} > int rc = serialize_RequestHeader(oa, "header", &h); > .... > > {color:#ff0000}queue_completion(&clist, entry, 0); //queue it will segment > errors{color} > > > {color:#FF0000}// do lock or unlock which have not been initialized!!{color} > static void queue_completion(completion_head_t *list, completion_list_t *c, > int add_to_front) > { lock_completion_list(list); queue_completion_nolock(list, c, > add_to_front); unlock_completion_list(list); } > {color:#FF0000}// oh my god!!{color} > int unlock_completion_list(completion_head_t *l) > { p_thread_cond_broadcast(&l->cond); return > p_thread_mutex_unlock(&l->lock); } -- This message was sent by Atlassian Jira (v8.20.10#820010)