]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-meta/search.c
fix ITS#4071
[openldap] / servers / slapd / back-meta / search.c
index 1f1408d19c49b3c8a2054f4e2385cbff347f200d..544bf6e31f5f2c0a9ebe69d01b505cebadf15221 100644 (file)
@@ -244,8 +244,9 @@ meta_back_search( Operation *op, SlapReply *rs )
        LDAPMessage     *res = NULL, *e;
        int             rc = 0, sres = LDAP_SUCCESS;
        char            *matched = NULL;
-       int             i, last = 0, ncandidates = 0,
+       int             last = 0, ncandidates = 0,
                        initial_candidates = 0, candidate_match = 0;
+       long            i;
        dncookie        dc;
        int             is_ok = 0;
        void            *savepriv;
@@ -357,7 +358,6 @@ meta_back_search( Operation *op, SlapReply *rs )
 
        if ( op->ors_tlimit != SLAP_NO_LIMIT ) {
                stoptime = op->o_time + op->ors_tlimit;
-               tv.tv_sec = 0;
        }
 
        /*
@@ -630,11 +630,11 @@ really_bad:;
                                sres = slap_map_api2result( rs );
 
                                snprintf( buf, sizeof( buf ),
-                                       "%s meta_back_search[%d] "
-                                       "match=\"%s\" err=%d\n",
+                                       "%s meta_back_search[%ld] "
+                                       "match=\"%s\" err=%ld\n",
                                        op->o_log_prefix, i,
                                        candidates[ i ].sr_matched ? candidates[ i ].sr_matched : "",
-                                       candidates[ i ].sr_err );
+                                       (long) candidates[ i ].sr_err );
                                Debug( LDAP_DEBUG_ANY, "%s", buf, 0, 0 );
 
                                switch ( sres ) {
@@ -702,8 +702,7 @@ really_bad:;
                }
 
                if ( gotit == 0 ) {
-                       tv.tv_sec = 0;
-                        tv.tv_usec = 100000;   /* 0.1 s */
+                       LDAP_BACK_TV_SET( &tv );
                         ldap_pvt_thread_yield();
 
                } else {
@@ -726,7 +725,7 @@ really_bad:;
         * FIXME: only the last one gets caught!
         */
        savepriv = op->o_private;
-       op->o_private = (void *)mi->mi_ntargets;
+       op->o_private = (void *)(long)mi->mi_ntargets;
        if ( candidate_match > 0 ) {
                struct berval   pmatched = BER_BVNULL;
 
@@ -1072,9 +1071,8 @@ meta_send_entry(
                                }
                        }
 
-                       if ( last == 0 ) {
-                               ch_free( attr->a_vals );
-                               ch_free( attr );
+                       if ( last == 0 && attr->a_vals != &slap_dummy_bv ) {
+                               attr_free( attr );
                                goto next_attr;
                        }
                }