mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-02-11 13:50:39 +08:00
Better fix for #3671
This commit is contained in:
parent
895b74cb1d
commit
acd1e2852a
@ -131,7 +131,6 @@ typedef struct opcookie {
|
||||
struct berval sndn;
|
||||
struct berval suuid; /* UUID of entry */
|
||||
struct berval sctxcsn;
|
||||
syncops *shead; /* head of si_ops when we started */
|
||||
int sreference; /* Is the entry a reference? */
|
||||
} opcookie;
|
||||
|
||||
@ -986,11 +985,8 @@ syncprov_matchops( Operation *op, opcookie *opc, int saveit )
|
||||
ber_dupbv_x( &opc->suuid, &a->a_nvals[0], op->o_tmpmemctx );
|
||||
}
|
||||
|
||||
if (saveit) {
|
||||
ldap_pvt_thread_mutex_lock( &si->si_ops_mutex );
|
||||
opc->shead = si->si_ops;
|
||||
}
|
||||
for (ss = opc->shead, sprev = (syncops *)&si->si_ops; ss;
|
||||
for (ss = si->si_ops, sprev = (syncops *)&si->si_ops; ss;
|
||||
sprev = ss, ss=snext)
|
||||
{
|
||||
syncmatches *sm;
|
||||
@ -1038,15 +1034,20 @@ syncprov_matchops( Operation *op, opcookie *opc, int saveit )
|
||||
opc->smatches = sm;
|
||||
} else {
|
||||
/* if found send UPDATE else send ADD */
|
||||
ss->s_inuse++;
|
||||
ldap_pvt_thread_mutex_unlock( &si->si_ops_mutex );
|
||||
syncprov_sendresp( op, opc, ss, &e,
|
||||
found ? LDAP_SYNC_MODIFY : LDAP_SYNC_ADD, 1 );
|
||||
ldap_pvt_thread_mutex_lock( &si->si_ops_mutex );
|
||||
ss->s_inuse--;
|
||||
}
|
||||
} else if ( !saveit && found ) {
|
||||
/* send DELETE */
|
||||
ldap_pvt_thread_mutex_unlock( &si->si_ops_mutex );
|
||||
syncprov_sendresp( op, opc, ss, NULL, LDAP_SYNC_DELETE, 1 );
|
||||
ldap_pvt_thread_mutex_lock( &si->si_ops_mutex );
|
||||
}
|
||||
}
|
||||
if (saveit)
|
||||
ldap_pvt_thread_mutex_unlock( &si->si_ops_mutex );
|
||||
done:
|
||||
if ( op->o_tag != LDAP_REQ_ADD && e ) {
|
||||
|
Loading…
Reference in New Issue
Block a user