diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index aff6136f9a8c854fb725e55759fdb62caa251ee9..3f3f9a3727b1c83e75d40b35fe447a18bf12d13b 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -2105,7 +2105,10 @@ XLogFlush(XLogRecPtr record)
 		/* Got the lock; recheck whether request is satisfied */
 		LogwrtResult = XLogCtl->LogwrtResult;
 		if (XLByteLE(record, LogwrtResult.Flush))
+		{
+			LWLockRelease(WALWriteLock);
 			break;
+		}
 
 		/*
 		 * Sleep before flush! By adding a delay here, we may give further