X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fresult.c;h=49d742933900c385fa858e09f43a20b82c9a10b8;hb=5b2bfec3b4fa45dcfaed7780c7fdd42c4f69e75e;hp=0f1dca9f0aba2471d56972b7da31795ac39e7b3e;hpb=9e3af2356ba3aee70682f2a328da73998ffab649;p=openldap diff --git a/servers/slapd/result.c b/servers/slapd/result.c index 0f1dca9f0a..49d7429339 100644 --- a/servers/slapd/result.c +++ b/servers/slapd/result.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1998-2012 The OpenLDAP Foundation. + * Copyright 1998-2013 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -320,23 +320,7 @@ static long send_ldap_ber( while( 1 ) { int err; - /* lock the connection */ - if ( ldap_pvt_thread_mutex_trylock( &conn->c_mutex )) { - if ( !connection_valid(conn)) { - ret = 0; - break; - } - ldap_pvt_thread_mutex_unlock( &conn->c_write1_mutex ); - ldap_pvt_thread_mutex_lock( &conn->c_write1_mutex ); - if ( conn->c_writers < 0 ) { - ret = 0; - break; - } - continue; - } - if ( ber_flush2( conn->c_sb, ber, LBER_FLUSH_FREE_NEVER ) == 0 ) { - ldap_pvt_thread_mutex_unlock( &conn->c_mutex ); ret = bytes; break; } @@ -356,6 +340,7 @@ static long send_ldap_ber( conn->c_writers--; conn->c_writing = 0; ldap_pvt_thread_mutex_unlock( &conn->c_write1_mutex ); + ldap_pvt_thread_mutex_lock( &conn->c_mutex ); connection_closing( conn, "connection lost on write" ); ldap_pvt_thread_mutex_unlock( &conn->c_mutex ); @@ -368,7 +353,6 @@ static long send_ldap_ber( slapd_set_write( conn->c_sd, 2 ); ldap_pvt_thread_mutex_unlock( &conn->c_write1_mutex ); - ldap_pvt_thread_mutex_unlock( &conn->c_mutex ); ldap_pvt_thread_pool_idle( &connection_pool ); ldap_pvt_thread_cond_wait( &conn->c_write2_cv, &conn->c_write2_mutex ); conn->c_writewaiter = 0; @@ -752,7 +736,7 @@ clean2:; if ( rs->sr_flags & REP_CTRLS_MUSTBEFREED ) { rs->sr_flags ^= REP_CTRLS_MUSTBEFREED; /* paranoia */ if ( rs->sr_ctrls ) { - slap_free_ctrl_vals( op, rs->sr_ctrls ); + slap_free_ctrls( op, rs->sr_ctrls ); rs->sr_ctrls = NULL; } } @@ -1476,7 +1460,7 @@ error_return:; if ( rs->sr_flags & REP_CTRLS_MUSTBEFREED ) { rs->sr_flags ^= REP_CTRLS_MUSTBEFREED; /* paranoia */ if ( rs->sr_ctrls ) { - slap_free_ctrl_vals( op, rs->sr_ctrls ); + slap_free_ctrls( op, rs->sr_ctrls ); rs->sr_ctrls = NULL; } } @@ -1637,7 +1621,7 @@ rel: if ( rs->sr_flags & REP_CTRLS_MUSTBEFREED ) { rs->sr_flags ^= REP_CTRLS_MUSTBEFREED; /* paranoia */ if ( rs->sr_ctrls ) { - slap_free_ctrl_vals( op, rs->sr_ctrls ); + slap_free_ctrls( op, rs->sr_ctrls ); rs->sr_ctrls = NULL; } }