From 266d980984f649e8c1226102f0378b9d57966df4 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Thu, 17 Feb 2005 16:24:56 +0000 Subject: [PATCH] Import ITS#3546 fix from HEAD --- servers/slapd/config.c | 1 + servers/slapd/slap.h | 1 + servers/slapd/syncrepl.c | 10 ++++++++++ 3 files changed, 12 insertions(+) diff --git a/servers/slapd/config.c b/servers/slapd/config.c index f80beb7757..cf9e90eb69 100644 --- a/servers/slapd/config.c +++ b/servers/slapd/config.c @@ -2975,6 +2975,7 @@ add_syncrepl( si->si_presentlist = NULL; LDAP_LIST_INIT( &si->si_nonpresentlist ); + ldap_pvt_thread_mutex_init( &si->si_mutex ); rc = parse_syncrepl_line( cargv, cargc, si ); diff --git a/servers/slapd/slap.h b/servers/slapd/slap.h index 14c4d6f26a..9136f84122 100644 --- a/servers/slapd/slap.h +++ b/servers/slapd/slap.h @@ -1411,6 +1411,7 @@ typedef struct syncinfo_s { LDAP *si_ld; LDAP_LIST_HEAD(np, nonpresent_entry) si_nonpresentlist; LDAP_STAILQ_ENTRY( syncinfo_s ) si_next; + ldap_pvt_thread_mutex_t si_mutex; } syncinfo_t; LDAP_TAILQ_HEAD( be_pcl, slap_csn_entry ); diff --git a/servers/slapd/syncrepl.c b/servers/slapd/syncrepl.c index da4b114741..23488bf2cf 100644 --- a/servers/slapd/syncrepl.c +++ b/servers/slapd/syncrepl.c @@ -543,6 +543,10 @@ do_syncrep2( msg != NULL; msg = ldap_next_message( si->si_ld, msg ) ) { + if ( slapd_shutdown ) { + rc = -2; + goto done; + } switch( ldap_msgtype( msg ) ) { case LDAP_RES_SEARCH_ENTRY: ldap_get_entry_controls( si->si_ld, msg, &rctrls ); @@ -860,11 +864,14 @@ do_syncrepl( if ( si == NULL ) return NULL; + ldap_pvt_thread_mutex_lock( &si->si_mutex ); + switch( abs( si->si_type )) { case LDAP_SYNC_REFRESH_ONLY: case LDAP_SYNC_REFRESH_AND_PERSIST: break; default: + ldap_pvt_thread_mutex_unlock( &si->si_mutex ); return NULL; } @@ -875,6 +882,7 @@ do_syncrepl( ldap_unbind( si->si_ld ); si->si_ld = NULL; } + ldap_pvt_thread_mutex_unlock( &si->si_mutex ); return NULL; } @@ -976,6 +984,7 @@ do_syncrepl( } ldap_pvt_thread_mutex_unlock( &syncrepl_rq.rq_mutex ); + ldap_pvt_thread_mutex_unlock( &si->si_mutex ); return NULL; } @@ -2356,6 +2365,7 @@ avl_ber_bvfree( void *bv ) void syncinfo_free( syncinfo_t *sie ) { + ldap_pvt_thread_mutex_destroy( &sie->si_mutex ); if ( sie->si_provideruri ) { ch_free( sie->si_provideruri ); } -- 2.39.5