Various bugs in zoo_add_auth in C --------------------------------- Key: ZOOKEEPER-1108 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1108 Project: ZooKeeper Issue Type: Bug Components: c client Affects Versions: 3.3.3 Reporter: Dheeraj Agrawal Priority: Minor Fix For: 3.4.0
2 issues: In zoo_add_auth: there is a race condition: 2940 // [ZOOKEEPER-800] zoo_add_auth should return ZINVALIDSTATE if 2941 // the connection is closed. 2942 if (zoo_state(zh) == 0) { 2943 return ZINVALIDSTATE; 2944 } when we do zookeeper_init, the state is initialized to 0 and above we check if state = 0 then throw exception. There is a race condition where the doIo thread is slow and has not changed the state to CONNECTING, then you end up returning back ZKINVALIDSTATE. The problem is we use 0 for CLOSED state and UNINITIALIZED state. in case of uninitialized case it should let it go through. Also 2965 add_last_auth(&zh->auth_h, authinfo); 2966 zoo_unlock_auth(zh); 2967 2968 if(zh->state == ZOO_CONNECTED_STATE || zh->state == ZOO_ASSOCIATING_STATE) 2969 return send_last_auth_info(zh); if it is connected, we only send the last_auth_info, which may be different than the one we added, as we unlocked it before sending it. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira