X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Foverlays%2Fsyncprov.c;h=160b57a28990b56f2d8427bb13ca43c54fad3232;hb=0ba50a1d064ef71145fe0a08d813d710634a23b4;hp=fbb06050ff0877962d979cf2430d3773a6467064;hpb=dc3b3be429e3cd2ead8250b831e9da76026d2342;p=openldap diff --git a/servers/slapd/overlays/syncprov.c b/servers/slapd/overlays/syncprov.c index fbb06050ff..160b57a289 100644 --- a/servers/slapd/overlays/syncprov.c +++ b/servers/slapd/overlays/syncprov.c @@ -2,7 +2,7 @@ /* syncprov.c - syncrepl provider */ /* This work is part of OpenLDAP Software . * - * Copyright 2004-2017 The OpenLDAP Foundation. + * Copyright 2004-2018 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -1934,21 +1934,25 @@ syncprov_op_response( Operation *op, SlapReply *rs ) } /* Don't do any processing for consumer contextCSN updates */ - if ( op->o_dont_replicate ) { - if ( op->o_tag == LDAP_REQ_MODIFY && - op->orm_modlist->sml_op == LDAP_MOD_REPLACE && - op->orm_modlist->sml_desc == slap_schema.si_ad_contextCSN ) { + if ( SLAPD_SYNC_IS_SYNCCONN( op->o_connid ) && + op->o_tag == LDAP_REQ_MODIFY && + op->orm_modlist && + op->orm_modlist->sml_op == LDAP_MOD_REPLACE && + op->orm_modlist->sml_desc == slap_schema.si_ad_contextCSN ) { /* Catch contextCSN updates from syncrepl. We have to look at * all the attribute values, as there may be more than one csn * that changed, and only one can be passed in the csn queue. */ - csn_changed = syncprov_new_ctxcsn( opc, si, csn_changed, - op->orm_modlist->sml_numvals, op->orm_modlist->sml_values ); - } else { - ldap_pvt_thread_rdwr_wunlock( &si->si_csn_rwlock ); - } + csn_changed = syncprov_new_ctxcsn( opc, si, csn_changed, + op->orm_modlist->sml_numvals, op->orm_modlist->sml_values ); + if ( csn_changed ) + si->si_numops++; + goto leave; + } + if ( op->o_dont_replicate ) { if ( csn_changed ) si->si_numops++; + ldap_pvt_thread_rdwr_wunlock( &si->si_csn_rwlock ); goto leave; }