From: | Scott Lamb <slamb(at)slamb(dot)org> |
---|---|
To: | Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us> |
Cc: | Manfred Spraul <manfred(at)colorfullife(dot)com>, Steve Atkins <steve(at)blighty(dot)com>, pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: Mixing threaded and non-threaded |
Date: | 2004-01-31 20:08:45 |
Message-ID: | 465917D7-5429-11D8-8133-000A95891440@slamb.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Jan 30, 2004, at 4:53 PM, Bruce Momjian wrote:
>> Actually, thinking about this a bit more, that might not even be
>> necessary. Is SIGPIPE-via-(read|write) synchronous or asynchronous?
>> (I.e., is the SIGPIPE guaranteed to arrive during the offending system
>> call?) I was thinking not, but maybe yes. I can't seem to find a
>> straight answer. A lot of documents seem to confuse thread-directed
>> and
>> synchronous, when they're not quite the same thing.
>> SIGALRM-via-alarm()
>> is thread-directed but obviously asynchronous.
>
> SIGPIPE is a sychronous signal that is called during the read() in
> libpq. I am not sure what thread-directed is.
Ahh, then the usage in libpq is safe; sorry for the false alarm. The
concerns about signal safety are really only for async signals, as the
behavior is undefined only when one async signal-unsafe function is
called from a signal interrupting another:
"In the presence of signals, all functions defined by this volume of
IEEE Std 1003.1-2001 shall behave as defined when called from or
interrupted by a signal-catching function, with a single exception:
when a signal interrupts an unsafe function and the signal-catching
function calls an unsafe function, the behavior is undefined."
thread-directed, by the way, simply means that the signal is directed
at a specific thread, not just some thread in the process that doesn't
have it masked. It's the difference between kill() and pthread_kill().
AFAIK, all synchronous signals are thread-directed, but not all
thread-directed signals are synchronous.
Here the signal is synchronous, so the signal is guaranteed to happen
at a safe point (during the read()), so there's no problem.
Thanks,
Scott Lamb
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 2004-01-31 20:17:13 | Re: Mixing threaded and non-threaded |
Previous Message | Bruce Momjian | 2004-01-31 19:44:32 | Re: Transaction callback |