]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/overlays/syncprov.c
ITS#7256 A few issues discovered during testing slapmodify.
[openldap] / servers / slapd / overlays / syncprov.c
index c18e16483db9faa64126b403084d6d762b3a6a22..e7bddebcee8736e55e72e8f18a585374f731e7c4 100644 (file)
@@ -2,7 +2,7 @@
 /* syncprov.c - syncrepl provider */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 2004-2013 The OpenLDAP Foundation.
+ * Copyright 2004-2014 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -442,6 +442,7 @@ syncprov_findbase( Operation *op, fbase_cookie *fc )
                fop.o_hdr = op->o_hdr;
                fop.o_time = op->o_time;
                fop.o_tincr = op->o_tincr;
+               fop.o_extra = op->o_extra;
 
                cb.sc_response = findbase_cb;
                cb.sc_private = fc;
@@ -449,7 +450,6 @@ syncprov_findbase( Operation *op, fbase_cookie *fc )
                fop.o_sync_mode = 0;    /* turn off sync mode */
                fop.o_managedsait = SLAP_CONTROL_CRITICAL;
                fop.o_callback = &cb;
-               LDAP_SLIST_INIT( &fop.o_extra );
                fop.o_tag = LDAP_REQ_SEARCH;
                fop.ors_scope = LDAP_SCOPE_BASE;
                fop.ors_limit = NULL;
@@ -3170,6 +3170,7 @@ syncprov_db_close(
 
 #ifdef SLAP_CONFIG_DELETE
        if ( !slapd_shutdown ) {
+               ldap_pvt_thread_mutex_lock( &si->si_ops_mutex );
                for ( so=si->si_ops, sonext=so;  so; so=sonext  ) {
                        SlapReply rs = {REP_RESULT};
                        rs.sr_err = LDAP_UNAVAILABLE;
@@ -3178,6 +3179,7 @@ syncprov_db_close(
                        syncprov_drop_psearch( so, 0);
                }
                si->si_ops=NULL;
+               ldap_pvt_thread_mutex_unlock( &si->si_ops_mutex );
        }
        overlay_unregister_control( be, LDAP_CONTROL_SYNC );
 #endif /* SLAP_CONFIG_DELETE */