Re: Proposal for Signal Detection Refactoring

Поиск
Список
Период
Сортировка
От Chris Travers
Тема Re: Proposal for Signal Detection Refactoring
Дата
Msg-id CAN-RpxDS-cxM3ON7=32hdyUt+uHkb_F+18fX0815TVkAgd8O1Q@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Proposal for Signal Detection Refactoring  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: Proposal for Signal Detection Refactoring  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers


On Tue, Sep 25, 2018 at 3:03 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:
Michael Paquier <michael@paquier.xyz> writes:
> And then within separate signal handlers things like:
> void
> StatementCancelHandler(SIGNAL_ARGS)
> {
>     [...]
>     signalPendingFlags |= PENDING_INTERRUPT | PENDING_CANCEL_QUERY;
>     [...]
> }

AFAICS this still wouldn't work.  The machine code is still going to
look (on many machines) like "load from signalPendingFlags,
OR in some bits, store to signalPendingFlags".  So there's still a
window for another signal handler to interrupt that and store some
bits that will get lost.

You could only fix that by blocking all signal handling during the
handler, which would be expensive and rather pointless.

I do not think that it's readily possible to improve on the current
situation with one sig_atomic_t per flag.


After a fair bit of reading I think there are ways of doing this in C11 but I don't think those are portable to C99.

In C99 (and, in practice C89, as the C99 committee noted there were no known C89 implementations where reading was unsafe), reading or writing a static sig_atomic_t inside a signal handler is safe, but a round-trip is *not* guaranteed not to clobber.  While I could be wrong, I think it is only in C11 that you have any round-trip operations which are guaranteed not to clobber in the language itself.

Basically we are a long way out to be able to consider these a single value as flags.

However,  what I think one could do is use a struct of volatile sig_atomic_t members and macros for checking/setting.  Simply writing a value is safe in C89 and higher.



                        regards, tom lane


--
Best Regards,
Chris Travers
Head of Database

Tel: +49 162 9037 210 | Skype: einhverfr | www.adjust.com 
Saarbrücker Straße 37a, 10405 Berlin

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Thomas Munro
Дата:
Сообщение: Re: Strange failure in LWLock on skink in REL9_5_STABLE
Следующее
От: Chris Travers
Дата:
Сообщение: Re: Proposal for Signal Detection Refactoring