Re: elog(DEBUG2 in SpinLocked section.
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Michael Paquier <michael@paquier.xyz>
Cc: Kyotaro Horiguchi <horikyota.ntt@gmail.com>, masao.fujii@oss.nttdata.com,
amit.kapila16@gmail.com, pasim@vmware.com,
pgsql-hackers@lists.postgresql.org
Date: 2020-06-04T01:57:33Z
Lists: pgsql-hackers
Michael Paquier <michael@paquier.xyz> writes: > On Wed, Jun 03, 2020 at 12:36:34AM -0400, Tom Lane wrote: >> Should we think about adding automated detection of this type of >> mistake? I don't like the attached as-is because of the #include >> footprint expansion, but maybe we can find a better way. > I think that this one first boils down to the FRONTEND dependency in > those headers. Or in short, spin.h may get loaded by the frontend but > we have a backend-only API, no? I think the #include bloat comes from wanting to declare the global state variable as "slock_t *". We could give up on that and write something like this in a central place like c.h: #if defined(USE_ASSERT_CHECKING) && !defined(FRONTEND) extern void *held_spinlock; #define NotHoldingSpinLock() Assert(held_spinlock == NULL) #else #define NotHoldingSpinLock() ((void) 0) #endif Then throwing NotHoldingSpinLock() into relevant places costs nothing new include-wise. regards, tom lane
Commits
-
Fix instance of elog() called while holding a spinlock
- 4a9809e34d09 9.5.23 landed
- e7a134b5817b 9.6.19 landed
- 5ed8b4a981ed 10.14 landed
- b41a85f53317 11.9 landed
- 03aa25b6e34b 12.4 landed
- c1669fd5812a 13.0 landed
-
Don't call palloc() while holding a spinlock, either.
- 3d474a07934c 12.4 landed
- f88bd3139f3e 13.0 landed
- 7a8cb4a61e7e 11.9 landed
- 0c735c686a90 10.14 landed
-
Don't call elog() while holding spinlock.
- caa3c4242cf8 13.0 landed