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

        

Reply via email to