Re: Weird failure with latches in curculio on v15
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Andres Freund <andres@anarazel.de>
Cc: Michael Paquier <michael@paquier.xyz>,
Robert Haas <robertmhaas@gmail.com>,
Thomas Munro <thomas.munro@gmail.com>,
Fujii Masao <fujii@postgresql.org>,
Nathan Bossart <nathandbossart@gmail.com>,
Postgres hackers <pgsql-hackers@lists.postgresql.org>
Date: 2023-02-03T07:24:03Z
Lists: pgsql-hackers
Andres Freund <andres@anarazel.de> writes: > Ugh, I think I might understand what's happening: > The signal arrives just after the fork() (within system()). Because we > have all our processes configure themselves as process group leaders, > and we signal the entire process group (c.f. signal_child()), both the > child process and the parent will process the signal. So we'll end up > doing a proc_exit() in both. As both are trying to remove themselves > from the same PGPROC etc entry, that doesn't end well. Ugh ... > I don't see how we can solve that properly as long as we use system(). ... but I don't see how that's system()'s fault? Doing the fork() ourselves wouldn't change anything about that. > A workaround for the back branches could be to have a test in > StartupProcShutdownHandler() that tests if MyProcPid == getpid(), and > not do the proc_exit() if they don't match. We probably should just do > an _exit() in that case. Might work. > OTOH, the current approach only works on systems with setsid(2) support, > so we probably shouldn't rely so hard on it anyway. setsid(2) is required since SUSv2, so I'm not sure which systems are of concern here ... other than Redmond's of course. regards, tom lane
Commits
-
Avoid calling proc_exit() in processes forked by system().
- d0e7f95b4845 11.22 landed
- e2e16904224a 12.17 landed
- ac1dfc303d0e 13.13 landed
- 54fc9dca5b10 14.10 landed
- c9265ae80b6a 15.5 landed
- ee06199fcb0a 16.1 landed
- 97550c071197 17.0 landed
-
Move extra code out of the Pre/PostRestoreCommand() section.
- 882e522d6468 15.5 landed
- d1c56ad37b96 16.1 landed
- 8fb13dd6ab5b 17.0 landed
-
Revert refactoring of restore command code to shell_restore.c
- 2f6e15ac93c5 16.0 landed
-
Refactor code in charge of running shell-based recovery commands
- 9a740f81eb02 16.0 cited
-
Clean up inconsistent use of fflush().
- 7fed801135ba 16.0 cited
-
Report wait events for local shell commands like archive_command.
- 1b06d7bac901 15.0 cited