Re: Mixing threaded and non-threaded
От | Scott Lamb |
---|---|
Тема | Re: Mixing threaded and non-threaded |
Дата | |
Msg-id | 465917D7-5429-11D8-8133-000A95891440@slamb.org обсуждение исходный текст |
Ответ на | Re: Mixing threaded and non-threaded (Bruce Momjian <pgman@candle.pha.pa.us>) |
Список | 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
В списке pgsql-hackers по дате отправления: