NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: kern/56979: fork(2) fails to be signal safe
The following reply was made to PR lib/56979; it has been noted by GNATS.
From: Tom Lane <tgl%sss.pgh.pa.us@localhost>
To: Taylor R Campbell <riastradh%NetBSD.org@localhost>
Cc: gnats-bugs%NetBSD.org@localhost
Subject: Re: kern/56979: fork(2) fails to be signal safe
Date: Thu, 25 Aug 2022 22:37:03 -0400
Taylor R Campbell <riastradh%NetBSD.org@localhost> writes:
> Can you try the attached patch series? Do you have a quick reproducer
> for the problem? Ideally we could make an automatic test for this if
> there's a cheap reproducer to trigger the race.
I've built the system with that patch added, and will start using it
tomorrow. I do not have a reliable reproducer, and on reflection it's
hard to see how to make one -- unless you know of an operation that
would hold the rtld lock for a decently long period of time. However,
I'm finding that my macppc Postgres buildfarm instance [1] is hitting
this in perhaps one out of five or ten runs, so if it can survive for
a week or two then I'll feel pretty confident that this patch fixes
it for me.
FWIW, the second patch certainly looks like it will alleviate the
symptom I'm seeing. I suppose it would not fix cases where the
signal interrupts an operation holding the rtld lock exclusively;
but I do not think that will be a problem for my use-case. PLT
resolution is pretty much the only dynamic-loader operation that
I can foresee happening with signals enabled in the Postgres
postmaster --- indeed, before I saw this failure I'd have sworn
up and down that we do *nothing* interesting with signals enabled.
That select(2) call and the adjacent sigprocmask calls are the
entire extent of the window for trouble.
I have no opinion about the first patch -- Postgres doesn't use
pthread_atfork.
I'll report back in a week or two.
regards, tom lane
[1] https://buildfarm.postgresql.org/cgi-bin/show_history.pl?nm=mamba&br=HEAD
Home |
Main Index |
Thread Index |
Old Index