diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c
index 4b9fd76294d..e67046318a6 100644
--- a/src/backend/storage/buffer/bufmgr.c
+++ b/src/backend/storage/buffer/bufmgr.c
@@ -5771,9 +5771,12 @@ LockBufferForCleanup(Buffer buffer)
 		}
 		bufHdr->wait_backend_pgprocno = MyProcNumber;
 		PinCountWaitBuf = bufHdr;
-		UnlockBufHdrExt(bufHdr, buf_state,
-						BM_PIN_COUNT_WAITER, 0,
-						0);
+		for (volatile int i = 0; i < 10000000; i++);
+		buf_state = UnlockBufHdrExt(bufHdr, buf_state,
+									BM_PIN_COUNT_WAITER, 0,
+									0);
+		if (BUF_STATE_GET_REFCOUNT(buf_state) == 1)
+			elog(LOG, "cleanup-lock repro: refcount_is_one_after_waiter_publication");
 		LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
 
 		/* Wait to be signaled by UnpinBuffer() */
@@ -5822,7 +5825,11 @@ LockBufferForCleanup(Buffer buffer)
 			SetStartupBufferPinWaitBufId(-1);
 		}
 		else
+		{
+			elog(LOG, "cleanup-lock repro: before ProcWaitForSignal");
 			ProcWaitForSignal(WAIT_EVENT_BUFFER_PIN);
+			elog(LOG, "cleanup-lock repro: after ProcWaitForSignal");
+		}
 
 		/*
 		 * Remove flag marking us as waiter. Normally this will not be set
