]> git.sur5r.net Git - openldap/commitdiff
ITS#6189 delay resetting the SLAP_C_BINDING state until the Bind handler
authorHoward Chu <hyc@openldap.org>
Sun, 28 Jun 2009 03:37:20 +0000 (03:37 +0000)
committerHoward Chu <hyc@openldap.org>
Sun, 28 Jun 2009 03:37:20 +0000 (03:37 +0000)
has fully returned to the connection manager. This may result in
"deferring operation: binding" messages being logged again (ITS#3850) but
it should not cause any hangs.

servers/slapd/connection.c

index cb818a4a9edb6029fe7827928de8c8433098047e..81ba89f6815feed7c2b7a7ec9216a7c4897dc135 100644 (file)
@@ -1127,6 +1127,9 @@ operations_error:
 
        ldap_pvt_thread_mutex_lock( &conn->c_mutex );
 
+       if ( opidx == SLAP_OP_BIND && conn->c_conn_state == SLAP_C_BINDING )
+               conn->c_conn_state = SLAP_C_ACTIVE;
+
        cancel = op->o_cancel;
        if ( cancel != SLAP_CANCEL_NONE && cancel != SLAP_CANCEL_DONE ) {
                if ( cancel == SLAP_CANCEL_REQ ) {
@@ -1534,6 +1537,8 @@ connection_input( Connection *conn , conn_readinfo *cri )
        ctx = cri->ctx;
        op = slap_op_alloc( ber, msgid, tag, conn->c_n_ops_received++, ctx );
 
+       Debug( LDAP_DEBUG_TRACE, "op tag %d, time %d\n", tag, op->o_time, 0);
+
        op->o_conn = conn;
        /* clear state if the connection is being reused from inactive */
        if ( conn->c_conn_state == SLAP_C_INACTIVE ) {
@@ -1719,8 +1724,6 @@ static int connection_bind_cleanup_cb( Operation *op, SlapReply *rs )
 static int connection_bind_cb( Operation *op, SlapReply *rs )
 {
        ldap_pvt_thread_mutex_lock( &op->o_conn->c_mutex );
-       if ( op->o_conn->c_conn_state == SLAP_C_BINDING )
-               op->o_conn->c_conn_state = SLAP_C_ACTIVE;
        op->o_conn->c_sasl_bind_in_progress =
                ( rs->sr_err == LDAP_SASL_BIND_IN_PROGRESS );