From 143635437a03632255a5110b81d23a442f2f7f7b Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Sat, 18 Jun 2005 09:06:12 +0000 Subject: [PATCH] ITS#3549 don't queue Unbind requests --- servers/slapd/connection.c | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) 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 ) { -- 2.39.5