mirror of
https://github.com/postgres/postgres.git
synced 2025-04-21 12:05:57 +03:00
Further second thoughts about idle_session_timeout patch.
On reflection, the order of operations in PostgresMain() is wrong. These timeouts ought to be shut down before, not after, we do the post-command-read CHECK_FOR_INTERRUPTS, to guarantee that any timeout error will be detected there rather than at some ill-defined later point (possibly after having wasted a lot of work). This is really an error in the original idle_in_transaction_timeout patch, so back-patch to 9.6 where that was introduced.
This commit is contained in:
parent
0f8977b3f2
commit
5db4fdc224
@ -4269,7 +4269,18 @@ PostgresMain(int argc, char *argv[],
|
|||||||
firstchar = ReadCommand(&input_message);
|
firstchar = ReadCommand(&input_message);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (4) disable async signal conditions again.
|
* (4) turn off the idle-in-transaction timeout, if active. We do
|
||||||
|
* this before step (5) so that any last-moment timeout is certain to
|
||||||
|
* be detected in step (5).
|
||||||
|
*/
|
||||||
|
if (disable_idle_in_transaction_timeout)
|
||||||
|
{
|
||||||
|
disable_timeout(IDLE_IN_TRANSACTION_SESSION_TIMEOUT, false);
|
||||||
|
disable_idle_in_transaction_timeout = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (5) disable async signal conditions again.
|
||||||
*
|
*
|
||||||
* Query cancel is supposed to be a no-op when there is no query in
|
* Query cancel is supposed to be a no-op when there is no query in
|
||||||
* progress, so if a query cancel arrived while we were idle, just
|
* progress, so if a query cancel arrived while we were idle, just
|
||||||
@ -4280,15 +4291,6 @@ PostgresMain(int argc, char *argv[],
|
|||||||
CHECK_FOR_INTERRUPTS();
|
CHECK_FOR_INTERRUPTS();
|
||||||
DoingCommandRead = false;
|
DoingCommandRead = false;
|
||||||
|
|
||||||
/*
|
|
||||||
* (5) turn off the idle-in-transaction timeout
|
|
||||||
*/
|
|
||||||
if (disable_idle_in_transaction_timeout)
|
|
||||||
{
|
|
||||||
disable_timeout(IDLE_IN_TRANSACTION_SESSION_TIMEOUT, false);
|
|
||||||
disable_idle_in_transaction_timeout = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (6) check for any other interesting events that happened while we
|
* (6) check for any other interesting events that happened while we
|
||||||
* slept.
|
* slept.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user