X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-ldap%2Fsearch.c;h=094d76ec424a6910565514df592667e29972d1a3;hb=f9e417a2634a6681941772ed488ffaff47f33a4c;hp=22aa5c23c20e8a7702affe6098455b74e1d87d62;hpb=42c1ff8a28d35482e9c34d063b4bd5d441bb364a;p=openldap diff --git a/servers/slapd/back-ldap/search.c b/servers/slapd/back-ldap/search.c index 22aa5c23c2..094d76ec42 100644 --- a/servers/slapd/back-ldap/search.c +++ b/servers/slapd/back-ldap/search.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1999-2012 The OpenLDAP Foundation. + * Copyright 1999-2013 The OpenLDAP Foundation. * Portions Copyright 1999-2003 Howard Chu. * Portions Copyright 2000-2003 Pierangelo Masarati. * All rights reserved. @@ -236,6 +236,10 @@ retry: tv.tv_sec ? &tv : NULL, op->ors_slimit, op->ors_deref, &msgid ); + ldap_pvt_thread_mutex_lock( &li->li_counter_mutex ); + ldap_pvt_mp_add( li->li_ops_completed[ SLAP_OP_SEARCH ], 1 ); + ldap_pvt_thread_mutex_unlock( &li->li_counter_mutex ); + if ( rs->sr_err != LDAP_SUCCESS ) { switch ( rs->sr_err ) { case LDAP_SERVER_DOWN: @@ -550,16 +554,25 @@ retry: } } - if ( rc == -1 && dont_retry == 0 ) { - if ( do_retry ) { - do_retry = 0; - if ( ldap_back_retry( &lc, op, rs, LDAP_BACK_DONTSEND ) ) { - goto retry; + if ( rc == -1 ) { + if ( dont_retry == 0 ) { + if ( do_retry ) { + do_retry = 0; + if ( ldap_back_retry( &lc, op, rs, LDAP_BACK_DONTSEND ) ) { + goto retry; + } } + + rs->sr_err = LDAP_SERVER_DOWN; + rs->sr_err = slap_map_api2result( rs ); + goto finish; + + } else if ( LDAP_BACK_ONERR_STOP( li ) ) { + /* if onerr == STOP */ + rs->sr_err = LDAP_SERVER_DOWN; + rs->sr_err = slap_map_api2result( rs ); + goto finish; } - rs->sr_err = LDAP_SERVER_DOWN; - rs->sr_err = slap_map_api2result( rs ); - goto finish; } /* @@ -575,6 +588,8 @@ retry: rs->sr_matched = pmatch.bv_val; rs->sr_flags |= REP_MATCHED_MUSTBEFREED; } + +finish:; if ( !BER_BVISNULL( &match ) ) { ber_memfree( match.bv_val ); } @@ -583,7 +598,6 @@ retry: rs->sr_err = LDAP_REFERRAL; } -finish:; if ( LDAP_BACK_QUARANTINE( li ) ) { ldap_back_quarantine( op, rs ); }