mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-24 13:24:56 +08:00
ITS#6001 SID of queued CSN must match the one in the op
This commit is contained in:
parent
b7a3f536ca
commit
447f3f746e
@ -40,6 +40,7 @@ slap_get_commit_csn(
|
||||
{
|
||||
struct slap_csn_entry *csne, *committed_csne = NULL;
|
||||
BackendDB *be = op->o_bd->bd_self;
|
||||
int sid = -1;
|
||||
|
||||
if ( maxcsn ) {
|
||||
assert( maxcsn->bv_val != NULL );
|
||||
@ -51,6 +52,10 @@ slap_get_commit_csn(
|
||||
|
||||
ldap_pvt_thread_mutex_lock( &be->be_pcl_mutex );
|
||||
|
||||
if ( !BER_BVISEMPTY( &op->o_csn )) {
|
||||
sid = slap_parse_csn_sid( &op->o_csn );
|
||||
}
|
||||
|
||||
LDAP_TAILQ_FOREACH( csne, be->be_pending_csn_list, ce_csn_link ) {
|
||||
if ( csne->ce_opid == op->o_opid && csne->ce_connid == op->o_connid ) {
|
||||
csne->ce_state = SLAP_CSN_COMMIT;
|
||||
@ -60,8 +65,10 @@ slap_get_commit_csn(
|
||||
}
|
||||
|
||||
LDAP_TAILQ_FOREACH( csne, be->be_pending_csn_list, ce_csn_link ) {
|
||||
if ( csne->ce_state == SLAP_CSN_COMMIT ) committed_csne = csne;
|
||||
if ( csne->ce_state == SLAP_CSN_PENDING ) break;
|
||||
if ( sid != -1 && sid == csne->ce_sid ) {
|
||||
if ( csne->ce_state == SLAP_CSN_COMMIT ) committed_csne = csne;
|
||||
if ( csne->ce_state == SLAP_CSN_PENDING ) break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( maxcsn ) {
|
||||
@ -185,6 +192,7 @@ slap_queue_csn(
|
||||
|
||||
ber_dupbv( &pending->ce_csn, csn );
|
||||
ber_bvreplace_x( &op->o_csn, &pending->ce_csn, op->o_tmpmemctx );
|
||||
pending->ce_sid = slap_parse_csn_sid( csn );
|
||||
pending->ce_connid = op->o_connid;
|
||||
pending->ce_opid = op->o_opid;
|
||||
pending->ce_state = SLAP_CSN_PENDING;
|
||||
|
@ -2371,6 +2371,7 @@ typedef struct PagedResultsState {
|
||||
|
||||
struct slap_csn_entry {
|
||||
struct berval ce_csn;
|
||||
int ce_sid;
|
||||
unsigned long ce_opid;
|
||||
unsigned long ce_connid;
|
||||
#define SLAP_CSN_PENDING 1
|
||||
|
Loading…
Reference in New Issue
Block a user