From ab77b2da8bf2cd1c8068f2f90e95c42d426aba3c Mon Sep 17 00:00:00 2001
From: Robert Haas <rhaas@postgresql.org>
Date: Wed, 18 Apr 2012 10:55:40 -0400
Subject: [PATCH] Fix incorrect comment in SetBufferCommitInfoNeedsSave().

Noah Misch spotted the fact that the old comment is in fact incorrect, due
to memory ordering hazards.
---
 src/backend/storage/buffer/bufmgr.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c
index 613d7544c63..ad5a97a3523 100644
--- a/src/backend/storage/buffer/bufmgr.c
+++ b/src/backend/storage/buffer/bufmgr.c
@@ -2376,9 +2376,11 @@ SetBufferCommitInfoNeedsSave(Buffer buffer)
 	 * making the first scan after commit of an xact that added/deleted many
 	 * tuples.	So, be as quick as we can if the buffer is already dirty.  We
 	 * do this by not acquiring spinlock if it looks like the status bits are
-	 * already OK.	(Note it is okay if someone else clears BM_JUST_DIRTIED
-	 * immediately after we look, because the buffer content update is already
-	 * done and will be reflected in the I/O.)
+	 * already.  Since we make this test unlocked, there's a chance we might
+	 * fail to notice that the flags have just been cleared, and failed to reset
+	 * them, due to memory-ordering issues.  But since this function is only
+	 * intended to be used in cases where failing to write out the data would
+	 * be harmless anyway, it doesn't really matter.
 	 */
 	if ((bufHdr->flags & (BM_DIRTY | BM_JUST_DIRTIED)) !=
 		(BM_DIRTY | BM_JUST_DIRTIED))
-- 
GitLab