From: Howard Chu Date: Sat, 18 Jun 2005 09:06:12 +0000 (+0000) Subject: ITS#3549 don't queue Unbind requests X-Git-Tag: OPENLDAP_AC_BP~513 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=143635437a03632255a5110b81d23a442f2f7f7b;p=openldap ITS#3549 don't queue Unbind requests --- 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 ) {