X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fconnection.c;h=036f7ae0e17f2eeaf8f0371bc9a5cedfeb61158e;hb=61312e7989b6b0cf97b859caf4b43fa7e70741c8;hp=2f9ab790610e39ae41a45572783d1e1dfb773728;hpb=0f4a5f74453365236874d4223e1a177de0a2970d;p=openldap diff --git a/servers/slapd/connection.c b/servers/slapd/connection.c index 2f9ab79061..036f7ae0e1 100644 --- a/servers/slapd/connection.c +++ b/servers/slapd/connection.c @@ -1474,16 +1474,32 @@ connection_input( * already pending ops, let them go first. Abandon operations * get exceptions to some, but not all, cases. */ - if (tag != LDAP_REQ_ABANDON && conn->c_conn_state == SLAP_C_CLOSING) { - defer = "closing"; - } else if (tag != LDAP_REQ_ABANDON && conn->c_writewaiter) { - defer = "awaiting write"; - } else if (conn->c_n_ops_executing >= connection_pool_max/2) { - defer = "too many executing"; - } else if (conn->c_conn_state == SLAP_C_BINDING) { - defer = "binding"; - } else if (tag != LDAP_REQ_ABANDON && conn->c_n_ops_pending) { - defer = "pending operations"; + switch( tag ){ + default: + /* Abandon and Unbind are exempt from these checks */ + if (conn->c_conn_state == SLAP_C_CLOSING) { + defer = "closing"; + break; + } else if (conn->c_writewaiter) { + defer = "awaiting write"; + break; + } else if (conn->c_n_ops_pending) { + defer = "pending operations"; + break; + } + /* FALLTHRU */ + case LDAP_REQ_ABANDON: + /* Unbind is exempt from these checks */ + if (conn->c_n_ops_executing >= connection_pool_max/2) { + defer = "too many executing"; + break; + } else if (conn->c_conn_state == SLAP_C_BINDING) { + defer = "binding"; + break; + } + /* FALLTHRU */ + case LDAP_REQ_UNBIND: + break; } if( defer ) {