pgsql: Set the process latch when processing recovery conflict interrup
От | Andres Freund |
---|---|
Тема | pgsql: Set the process latch when processing recovery conflict interrup |
Дата | |
Msg-id | E1WrnrF-0002RD-Ck@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Set the process latch when processing recovery conflict interrupts. Because RecoveryConflictInterrupt() didn't set the process latch anything using the latter to wait for events didn't get notified about recovery conflicts. Most latch users are never the target of recovery conflicts, which explains the lack of reports about this until now. Since 9.3 two possible affected users exist though: The sql callable pg_sleep() now uses latches to wait and background workers are expected to use latches in their main loop. Both would currently wait until the end of WaitLatch's timeout. Fix by adding a SetLatch() to RecoveryConflictInterrupt(). It'd also be possible to fix the issue by having each latch user set set_latch_on_sigusr1. That seems failure prone and though, as most of these callsites won't often receive recovery conflicts and thus will likely only be tested against normal query cancels et al. It'd also be unnecessarily verbose. Backpatch to 9.1 where latches were introduced. Arguably 9.3 would be sufficient, because that's where pg_sleep() was converted to waiting on the latch and background workers got introduced; but there could be user level code making use of the latch pre 9.3. Branch ------ REL9_2_STABLE Details ------- http://git.postgresql.org/pg/commitdiff/f998e9940065e58596c3aba9bfa51473b46bf1ed Modified Files -------------- src/backend/tcop/postgres.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
В списке pgsql-committers по дате отправления: