Fix crash in autoprewarm.
authorNathan Bossart
Tue, 23 Jan 2024 20:20:14 +0000 (14:20 -0600)
committerNathan Bossart
Tue, 23 Jan 2024 20:20:14 +0000 (14:20 -0600)
commitbcd5b4bcbefc8b99be3678cf9c6c990a0c28f68e
treed52f3e76e8a8740086b7f9c146c8297ba3184731
parent79b03dbb3304539c6599593397c6a6b63b6a6ad9
Fix crash in autoprewarm.

Commit abb0b4fc03 moved the shared state for autoprewarm to a
dynamic shared memory (DSM) segment, but it left apw_detach_shmem()
in the on_shmem_exit callback list for the autoprewarm leader
process.  This is a problem because shmem_exit() detaches all the
DSM segments prior to calling the on_shmem_exit callbacks, thus
producing segfaults in the exit path for the autoprewarm leader
process.

To fix, move apw_detach_shmem() to the before_shmem_exit callback
list.  This commit also adds a check to pg_prewarm's test that the
server shut down normally.  It might be worth making this a common
check for all shutdowns in TAP tests, but that is left as a future
exercise.

Reported-by: Andres Freund
Reviewed-by: Andres Freund, Álvaro Herrera
Discussion: https://postgr.es/m/20240122204117.swton324xcoodnyi%40awork3.anarazel.de
contrib/pg_prewarm/autoprewarm.c
contrib/pg_prewarm/t/001_basic.pl