postgres.git / summary / log / commit / refs
commit 388ec04f14366d5df0c9b7958c5d9c09d4327f3a
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: Thu Jan 07 16:45:09 2021 +0000
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.
src/backend/tcop/postgres.c | 22 ++++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index 29836f9299e..8d527280b82 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -4069,7 +4069,18 @@ PostgresMain(int argc, char *argv[],
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
* progress, so if a query cancel arrived while we were idle, just
@@ -4080,15 +4091,6 @@ PostgresMain(int argc, char *argv[],
CHECK_FOR_INTERRUPTS();
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
* slept.
[parent: dd312101efc1]