pg.ddx.io pgsql-committers@postgresql.org mailing list archive
help / color / mirror / Atom feed[PATCH v2 1/2] Detect unlocking an unlocked spinlock
1+ messages / 1 participants
[nested] [flat]
* [PATCH v2 1/2] Detect unlocking an unlocked spinlock
@ 2024-07-29 16:48 Andres Freund <andres@anarazel.de>
0 siblings, 0 replies; 1+ messages in thread
From: Andres Freund @ 2024-07-29 16:48 UTC (permalink / raw)
Author:
Reviewed-by:
Discussion: https://postgr.es/m/20240729164026.yurg37tej34o76uk@awork3.anarazel.de
Backpatch:
---
src/include/storage/spin.h | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
inline patch 1: src/include/storage/spin.h (+16/-1 lines) download inline-1.patch
diff --git a/src/include/storage/spin.h b/src/include/storage/spin.h
index c0679c59992..7ec32cd816a 100644
--- a/src/include/storage/spin.h
+++ b/src/include/storage/spin.h
@@ -61,7 +61,22 @@
#define SpinLockAcquire(lock) S_LOCK(lock)
-#define SpinLockRelease(lock) S_UNLOCK(lock)
+static inline void
+SpinLockRelease(volatile slock_t *lock)
+{
+ /*
+ * Check that this backend actually held the spinlock. Implemented as a
+ * static inline to avoid multiple-evaluation hazards.
+ *
+ * Can't assert when using the semaphore fallback implementation - it
+ * doesn't implement S_LOCK_FREE() - but the fallback triggers failures in
+ * the case of double-release on its own.
+ */
+#ifdef HAVE_SPINLOCKS
+ Assert(!S_LOCK_FREE(lock));
+#endif
+ S_UNLOCK(lock);
+}
#define SpinLockFree(lock) S_LOCK_FREE(lock)
--
2.45.2.746.g06e570c0df.dirty
--fx3sz6dtlxai2igx
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
filename="v2-0002-Detect-many-uses-of-uninitialized-spinlocks-on-x8.patch"
^ permalink raw reply [nested|flat] 1+ messages in thread
only message in thread
Thread overview: 1+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2024-07-29 16:48 [PATCH v2 1/2] Detect unlocking an unlocked spinlock Andres Freund <andres@anarazel.de>
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox