This is a multi-part message in MIME format. --------------090602010509010401080002 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit
I saw that the master is lost some changes of the my original patch (that was early attached to ITS).
Please see attached diff. I think it is a race condition around si_cookieState inside for-loop.
--------------090602010509010401080002 Content-Type: text/x-patch; name="its#7968-lost.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="its#7968-lost.patch"
diff --git a/servers/slapd/syncrepl.c b/servers/slapd/syncrepl.c --- a/servers/slapd/syncrepl.c +++ b/servers/slapd/syncrepl.c @@ -958,15 +958,17 @@ do_syncrep2( ldap_pvt_thread_yield(); }
+ ldap_pvt_thread_mutex_lock( &si->si_cookieState->cs_mutex ); for ( i =0; i<si->si_cookieState->cs_pnum; i++ ) { if ( sid < si->si_cookieState->cs_psids[i] ) break; if ( si->si_cookieState->cs_psids[i] == sid ) { if ( ber_bvcmp( syncCookie.ctxcsn, &si->si_cookieState->cs_pvals[i] ) <= 0 ) { - ldap_pvt_thread_mutex_unlock( &si->si_cookieState->cs_pmutex ); bdn.bv_val[bdn.bv_len] = '\0'; Debug( LDAP_DEBUG_SYNC, "do_syncrep2: %s CSN pending, ignoring %s (%s)\n", si->si_ridtxt, syncCookie.ctxcsn->bv_val, bdn.bv_val ); + ldap_pvt_thread_mutex_unlock( &si->si_cookieState->cs_mutex ); + ldap_pvt_thread_mutex_unlock( &si->si_cookieState->cs_pmutex ); ldap_controls_free( rctrls ); rc = 0; goto done; @@ -983,6 +985,7 @@ do_syncrep2( (struct sync_cookie *)&si->si_cookieState->cs_pvals, i, sid, syncCookie.ctxcsn ); } + ldap_pvt_thread_mutex_unlock( &si->si_cookieState->cs_mutex ); assert( punlock < 0 ); punlock = i; } else if (si->si_too_old) {
--------------090602010509010401080002--