]> git.sur5r.net Git - openldap/commitdiff
ITS#6397
authorQuanah Gibson-Mount <quanah@openldap.org>
Tue, 24 Nov 2009 01:53:26 +0000 (01:53 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Tue, 24 Nov 2009 01:53:26 +0000 (01:53 +0000)
CHANGES
servers/slapd/overlays/syncprov.c

diff --git a/CHANGES b/CHANGES
index aef0d0f4274618b05cc9a42884552c079341c005..e6207e5c818bd088680a4b37bd879aedb5471626 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -38,6 +38,7 @@ OpenLDAP 2.4.20 Engineering
        Fixed slapo-syncprov deadlock (ITS#6335)
        Fixed slapo-syncprov memory leak (ITS#6376)
        Fixed slapo-syncprov out of order changes (ITS#6346)
+       Fixed slapo-syncprov psearch with stale cookie (ITS#6397)
        Build Environment
                Added additional operations for ITS#6332
                Fixed memrchr define (ITS#6351)
index 7fb91455af5a944221ecb4fde8376f550acfd656..675568e7f27b903addf78a68c6e7bd5779308570 100644 (file)
@@ -2473,6 +2473,8 @@ syncprov_op_search( Operation *op, SlapReply *rs )
                                                changed = SS_CHANGED;
                                        else if ( newer > 0 ) {
                                        /* our state is older, tell consumer nothing */
+                                               rs->sr_err = LDAP_SUCCESS;
+bailout:
                                                if ( sop ) {
                                                        syncops **sp = &si->si_ops;
                                                        
@@ -2483,7 +2485,6 @@ syncprov_op_search( Operation *op, SlapReply *rs )
                                                        ldap_pvt_thread_mutex_unlock( &si->si_ops_mutex );
                                                        ch_free( sop );
                                                }
-                                               rs->sr_err = LDAP_SUCCESS;
                                                rs->sr_ctrls = NULL;
                                                send_ldap_result( op, rs );
                                                return rs->sr_err;
@@ -2538,8 +2539,9 @@ no_change:                if ( !(op->o_sync_mode & SLAP_SYNC_PERSIST) ) {
                                        ber_bvarray_free_x( ctxcsn, op->o_tmpmemctx );
                                if ( sids )
                                        op->o_tmpfree( sids, op->o_tmpmemctx );
-                               send_ldap_error( op, rs, LDAP_SYNC_REFRESH_REQUIRED, "sync cookie is stale" );
-                               return rs->sr_err;
+                               rs->sr_err = LDAP_SYNC_REFRESH_REQUIRED;
+                               rs->sr_text = "sync cookie is stale";
+                               goto bailout;
                        }
                        if ( srs->sr_state.ctxcsn ) {
                                ber_bvarray_free_x( srs->sr_state.ctxcsn, op->o_tmpmemctx );
@@ -2559,8 +2561,7 @@ no_change:                if ( !(op->o_sync_mode & SLAP_SYNC_PERSIST) ) {
                                        ber_bvarray_free_x( ctxcsn, op->o_tmpmemctx );
                                if ( sids )
                                        op->o_tmpfree( sids, op->o_tmpmemctx );
-                               send_ldap_result( op, rs );
-                               return rs->sr_err;
+                               goto bailout;
                        }
                }
        } else {