pgsql: Don't run atexit callbacks in quickdie signal handlers.

Поиск
Список
Период
Сортировка
От Heikki Linnakangas
Тема pgsql: Don't run atexit callbacks in quickdie signal handlers.
Дата
Msg-id E1fnRBS-0005c2-GY@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Don't run atexit callbacks in quickdie signal handlers.

exit() is not async-signal safe. Even if the libc implementation is, 3rd
party libraries might have installed unsafe atexit() callbacks. After
receiving SIGQUIT, we really just want to exit as quickly as possible, so
we don't really want to run the atexit() callbacks anyway.

The original report by Jimmy Yih was a self-deadlock in startup_die().
However, this patch doesn't address that scenario; the signal handling
while waiting for the startup packet is more complicated. But at least this
alleviates similar problems in the SIGQUIT handlers, like that reported
by Asim R P later in the same thread.

Backpatch to 9.3 (all supported versions).

Discussion:
https://www.postgresql.org/message-id/CAOMx_OAuRUHiAuCg2YgicZLzPVv5d9_H4KrL_OFsFP%3DVPekigA%40mail.gmail.com

Branch
------
REL_11_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/79f17d45e82f3648c2459b8128ab4d516fb7640a

Modified Files
--------------
src/backend/postmaster/bgworker.c     | 25 +++++++++----------------
src/backend/postmaster/bgwriter.c     | 24 +++++++++---------------
src/backend/postmaster/checkpointer.c | 24 +++++++++---------------
src/backend/postmaster/startup.c      | 24 +++++++++---------------
src/backend/postmaster/walwriter.c    | 24 +++++++++---------------
src/backend/replication/walreceiver.c | 32 +++++++++++++-------------------
src/backend/tcop/postgres.c           | 32 +++++++++++++++++++-------------
7 files changed, 77 insertions(+), 108 deletions(-)


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

Предыдущее
От: Tom Lane
Дата:
Сообщение: pgsql: Match RelOptInfos by relids not pointer equality.
Следующее
От: Tom Lane
Дата:
Сообщение: pgsql: Remove unwanted "garbage cleanup" logic in Makefiles.