diff --git a/servers/slapd/overlays/syncprov.c b/servers/slapd/overlays/syncprov.c
index 3a8c62649e3973005431ac19755123f319f979b5..11dcbc20f76809b74aa9085ec55221a1825a2837 100644
--- a/servers/slapd/overlays/syncprov.c
+++ b/servers/slapd/overlays/syncprov.c
@@ -918,14 +918,16 @@ syncprov_qplay( Operation *op, syncops *so )
 
 	do {
 		ldap_pvt_thread_mutex_lock( &so->s_mutex );
+		/* Exit loop with mutex held */
+		if ( so->s_op->o_abandon )
+			break;
 		sr = so->s_res;
-		if ( sr )
-			so->s_res = sr->s_next;
-		if ( !so->s_res )
-			so->s_restail = NULL;
 		/* Exit loop with mutex held */
-		if ( !sr || so->s_op->o_abandon )
+		if ( !sr )
 			break;
+		so->s_res = sr->s_next;
+		if ( !so->s_res )
+			so->s_restail = NULL;
 		ldap_pvt_thread_mutex_unlock( &so->s_mutex );
 
 		if ( sr->s_mode == LDAP_SYNC_NEW_COOKIE ) {