Re: Atomics for heap_parallelscan_nextpage()
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Heikki Linnakangas <hlinnaka@iki.fi>
Cc: Andres Freund <andres@anarazel.de>,
David Rowley <david.rowley@2ndquadrant.com>,
PostgreSQL-development <pgsql-hackers@postgresql.org>,
Amit Khandekar <amitdkhan.pg@gmail.com>,
Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>,
Robert Haas <robertmhaas@gmail.com>
Date: 2017-08-16T22:09:27Z
Lists: pgsql-hackers
Heikki Linnakangas <hlinnaka@iki.fi> writes: > On 08/17/2017 12:20 AM, Tom Lane wrote: >> Indeed, gaur fails with >> 2017-08-16 17:09:38.315 EDT [13043:11] PANIC: stuck spinlock detected at pg_atomic_compare_exchange_u64_impl, atomics.c:196 > I was able to reproduce this locally, with --disable-atomics, but only > after hacking it to fill the struct with garbage, before initializing > it. IOW, it failed to fail, because the spinlock happened to be > initialized correctly by accident. Perhaps that's happening on piculet, too. Oh, right. HPPA is unique among our platforms, I think, in that the "unlocked" state of a spinlock is not "all zeroes". So if you're dealing with pre-zeroed memory, which shmem generally would be, failing to initialize a spinlock does not cause visible errors except on HPPA. I wonder whether it's sensible to have --enable-cassert have the effect of filling memory allocated by ShmemAlloc or the DSA code with junk (as palloc does) instead of leaving it at zeroes. It's not modeling the same kind of effect, since we have no shmem-freeing primitives, but it might be useful for this sort of thing. regards, tom lane
Commits
-
Fix pg_atomic_u64 initialization.
- dcd052c8d20c 11.0 landed
-
Fix shm_toc.c to always return buffer-aligned memory.
- ac883ac453e9 11.0 landed
-
Use atomic ops to hand out pages to scan in parallel scan.
- 3cda10f41bfe 11.0 landed
-
Improve 64bit atomics support.
- e8fdbd58fe56 10.0 cited