pgsql: Avoid lockup of a parallel worker when reporting a long error me
От | Tom Lane |
---|---|
Тема | pgsql: Avoid lockup of a parallel worker when reporting a long error me |
Дата | |
Msg-id | E1kDwDg-0002C1-Dh@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Avoid lockup of a parallel worker when reporting a long error message. Because sigsetjmp() will restore the initial state with signals blocked, the code path in bgworker.c for reporting an error and exiting would execute that way. Usually this is fairly harmless; but if a parallel worker had an error message exceeding the shared-memory communication buffer size (16K) it would lock up, because it would wait for a resume-sending signal from its parallel leader which it would never detect. To fix, just unblock signals at the appropriate point. This can be shown to fail back to 9.6. The lack of parallel query infrastructure makes it difficult to provide a simple test case for 9.5; but I'm pretty sure the issue exists in some form there as well, so apply the code change there too. Vignesh C, reviewed by Bharath Rupireddy, Robert Haas, and myself Discussion: https://postgr.es/m/CALDaNm1d1hHPZUg3xU4XjtWBOLCrA+-2cJcLpw-cePZ=GgDVfA@mail.gmail.com Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/be4b0c0077e6a1f7be0965f8d93696e0e0eadb52 Modified Files -------------- src/backend/postmaster/bgworker.c | 11 +++++++++-- src/test/regress/expected/select_parallel.out | 5 +++-- src/test/regress/sql/select_parallel.sql | 3 ++- 3 files changed, 14 insertions(+), 5 deletions(-)
В списке pgsql-committers по дате отправления: