]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/backglue.c
cleanup
[openldap] / servers / slapd / backglue.c
index d60542d12fcaa95ead9178824c1978842ed30827..202c63cd9d882ec212ec6b39bd2c1b56a4f50c79 100644 (file)
@@ -269,12 +269,14 @@ glue_sub_search( Operation *op, SlapReply *rs, BackendDB *b0,
        /* Process any overlays on the master backend */
        if ( op->o_bd == b0 && on->on_next ) {
                BackendInfo *bi = op->o_bd->bd_info;
-               int rc;
+               int rc = SLAP_CB_CONTINUE;
                for ( on=on->on_next; on; on=on->on_next ) {
                        op->o_bd->bd_info = (BackendInfo *)on;
-                       rc = on->on_bi.bi_op_search( op, rs );
-                       if ( rc != SLAP_CB_CONTINUE )
-                               break;
+                       if ( on->on_bi.bi_op_search ) {
+                               rc = on->on_bi.bi_op_search( op, rs );
+                               if ( rc != SLAP_CB_CONTINUE )
+                                       break;
+                       }
                }
                op->o_bd->bd_info = bi;
                if ( rc != SLAP_CB_CONTINUE )
@@ -292,7 +294,7 @@ glue_op_search ( Operation *op, SlapReply *rs )
        BackendDB *b1 = NULL, *btmp;
        BackendInfo *bi0 = op->o_bd->bd_info;
        int i;
-       long stoptime = 0;
+       long stoptime = 0, starttime;
        glue_state gs = {NULL, NULL, NULL, 0, 0, 0, 0};
        slap_callback cb = { NULL, glue_op_response, NULL, NULL };
        int scope0, tlimit0;
@@ -302,6 +304,7 @@ glue_op_search ( Operation *op, SlapReply *rs )
 
        cb.sc_next = op->o_callback;
 
+       starttime = op->o_time;
        stoptime = slap_get_time () + op->ors_tlimit;
 
        op->o_bd = glue_back_select (b0, &op->o_req_ndn);
@@ -345,7 +348,8 @@ glue_op_search ( Operation *op, SlapReply *rs )
                        if (!dnIsSuffix(&btmp->be_nsuffix[0], &b1->be_nsuffix[0]))
                                continue;
                        if (tlimit0 != SLAP_NO_LIMIT) {
-                               op->ors_tlimit = stoptime - slap_get_time ();
+                               op->o_time = slap_get_time();
+                               op->ors_tlimit = stoptime - op->o_time;
                                if (op->ors_tlimit <= 0) {
                                        rs->sr_err = gs.err = LDAP_TIMELIMIT_EXCEEDED;
                                        break;
@@ -417,6 +421,7 @@ glue_op_search ( Operation *op, SlapReply *rs )
 end_of_loop:;
                op->ors_scope = scope0;
                op->ors_tlimit = tlimit0;
+               op->o_time = starttime;
                op->o_req_dn = dn;
                op->o_req_ndn = ndn;
 
@@ -441,7 +446,7 @@ end_of_loop:;
        if (gs.refs)
                ber_bvarray_free(gs.refs);
        if (gs.ctrls) {
-               for (gs.nctrls-1; i>=0; i--) {
+               for (i = gs.nctrls; --i >= 0; ) {
                        if (!BER_BVISNULL( &gs.ctrls[i]->ldctl_value ))
                                free(gs.ctrls[i]->ldctl_value.bv_val);
                        free(gs.ctrls[i]);