]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/syncrepl.c
implement search timeout when the remote server does not respond in the specified...
[openldap] / servers / slapd / syncrepl.c
index aaf8ef26b03085156e2e367d2f3d2aae042ff199..72374ec545cee7451b0037308f8ed4808249959f 100644 (file)
@@ -828,9 +828,10 @@ do_syncrep2(
                                                                struct berval *syncuuid_bv;
                                                                syncuuid_bv = ber_dupbv( NULL, &syncUUIDs[i] );
                                                                slap_sl_free( syncUUIDs[i].bv_val,op->o_tmpmemctx );
-                                                               avl_insert( &si->si_presentlist,
+                                                               if ( avl_insert( &si->si_presentlist,
                                                                        (caddr_t) syncuuid_bv,
-                                                                       syncuuid_cmp, avl_dup_error );
+                                                                       syncuuid_cmp, avl_dup_error ))
+                                                                       ber_bvfree( syncuuid_bv );
                                                        }
                                                        slap_sl_free( syncUUIDs, op->o_tmpmemctx );
                                                }
@@ -1412,12 +1413,6 @@ syncrepl_message_to_entry(
                return rc;
        }
 
-       dnPrettyNormal( NULL, &bdn, &dn, &ndn, op->o_tmpmemctx );
-       ber_dupbv( &op->o_req_dn, &dn );
-       ber_dupbv( &op->o_req_ndn, &ndn );
-       slap_sl_free( ndn.bv_val, op->o_tmpmemctx );
-       slap_sl_free( dn.bv_val, op->o_tmpmemctx );
-
        if ( syncstate == LDAP_SYNC_PRESENT || syncstate == LDAP_SYNC_DELETE ) {
                /* NOTE: this could be done even before decoding the DN,
                 * although encoding errors wouldn't be detected */
@@ -1430,6 +1425,12 @@ syncrepl_message_to_entry(
                goto done;
        }
 
+       dnPrettyNormal( NULL, &bdn, &dn, &ndn, op->o_tmpmemctx );
+       ber_dupbv( &op->o_req_dn, &dn );
+       ber_dupbv( &op->o_req_ndn, &ndn );
+       slap_sl_free( ndn.bv_val, op->o_tmpmemctx );
+       slap_sl_free( dn.bv_val, op->o_tmpmemctx );
+
        e = entry_alloc();
        e->e_name = op->o_req_dn;
        e->e_nname = op->o_req_ndn;
@@ -1608,8 +1609,11 @@ syncrepl_entry(
        if (( syncstate == LDAP_SYNC_PRESENT || syncstate == LDAP_SYNC_ADD )) {
                if ( !si->si_refreshPresent ) {
                        syncuuid_bv = ber_dupbv( NULL, syncUUID );
-                       avl_insert( &si->si_presentlist, (caddr_t) syncuuid_bv,
-                               syncuuid_cmp, avl_dup_error );
+                       if ( avl_insert( &si->si_presentlist, (caddr_t) syncuuid_bv,
+                               syncuuid_cmp, avl_dup_error )) {
+                               ber_bvfree( syncuuid_bv );
+                               syncuuid_bv = NULL;
+                       }
                }
        }