From 87a3023c60f4bab551441492652ef19371847fd3 Mon Sep 17 00:00:00 2001 From: Andres Freund <andres@anarazel.de> Date: Mon, 30 May 2016 15:35:53 -0700 Subject: [PATCH] Move memory barrier in UnlockBufHdr to before releasing the lock. This bug appears to have been introduced late in the development of 48354581a4 ("Allow Pin/UnpinBuffer to operate in a lockfree manner."). Found while debugging a bug which turned out to be independent of the commit mentioned above. Backpatch: - --- src/include/storage/buf_internals.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/include/storage/buf_internals.h b/src/include/storage/buf_internals.h index c9cae956a54..511d7409e6e 100644 --- a/src/include/storage/buf_internals.h +++ b/src/include/storage/buf_internals.h @@ -242,8 +242,8 @@ extern PGDLLIMPORT LWLockMinimallyPadded *BufferIOLWLockArray; extern uint32 LockBufHdr(BufferDesc *desc); #define UnlockBufHdr(desc, s) \ do { \ - pg_atomic_write_u32(&(desc)->state, (s) & (~BM_LOCKED)); \ pg_write_barrier(); \ + pg_atomic_write_u32(&(desc)->state, (s) & (~BM_LOCKED)); \ } while (0) -- GitLab