diff --git a/src/backend/storage/lmgr/condition_variable.c b/src/backend/storage/lmgr/condition_variable.c
index 67fe177a7ddd6fc64c8d08849a02304470211904..6f1ef0b7e5518bad55f4af1e4849699c4fc7edbe 100644
--- a/src/backend/storage/lmgr/condition_variable.c
+++ b/src/backend/storage/lmgr/condition_variable.c
@@ -71,14 +71,17 @@ ConditionVariablePrepareToSleep(ConditionVariable *cv)
 						  &MyProc->procLatch, NULL);
 	}
 
+	/*
+	 * Reset my latch before adding myself to the queue and before entering
+	 * the caller's predicate loop.
+	 */
+	ResetLatch(&MyProc->procLatch);
+
 	/* Add myself to the wait queue. */
 	SpinLockAcquire(&cv->mutex);
 	if (!proclist_contains(&cv->wakeup, pgprocno, cvWaitLink))
 		proclist_push_tail(&cv->wakeup, pgprocno, cvWaitLink);
 	SpinLockRelease(&cv->mutex);
-
-	/* Reset my latch before entering the caller's predicate loop. */
-	ResetLatch(&MyProc->procLatch);
 }
 
 /*--------------------------------------------------------------------------