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.patchdiff --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