diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 7ac623019b..fd4199a098 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -3409,8 +3409,10 @@ ProcessInterrupts(void) /* * If the GUC has been reset to zero, ignore the signal. This is * important because the GUC update itself won't disable any pending - * interrupt. + * interrupt. We need to unset the flag before the injection point, + * otherwise we could loop in interrupts checking. */ + IdleInTransactionSessionTimeoutPending = false; if (IdleInTransactionSessionTimeout > 0) { INJECTION_POINT("idle-in-transaction-session-timeout"); @@ -3418,13 +3420,12 @@ ProcessInterrupts(void) (errcode(ERRCODE_IDLE_IN_TRANSACTION_SESSION_TIMEOUT), errmsg("terminating connection due to idle-in-transaction timeout"))); } - else - IdleInTransactionSessionTimeoutPending = false; } if (TransactionTimeoutPending) { /* As above, ignore the signal if the GUC has been reset to zero. */ + TransactionTimeoutPending = false; if (TransactionTimeout > 0) { INJECTION_POINT("transaction-timeout"); @@ -3432,13 +3433,12 @@ ProcessInterrupts(void) (errcode(ERRCODE_TRANSACTION_TIMEOUT), errmsg("terminating connection due to transaction timeout"))); } - else - TransactionTimeoutPending = false; } if (IdleSessionTimeoutPending) { /* As above, ignore the signal if the GUC has been reset to zero. */ + IdleSessionTimeoutPending = false; if (IdleSessionTimeout > 0) { INJECTION_POINT("idle-session-timeout"); @@ -3446,8 +3446,6 @@ ProcessInterrupts(void) (errcode(ERRCODE_IDLE_SESSION_TIMEOUT), errmsg("terminating connection due to idle-session timeout"))); } - else - IdleSessionTimeoutPending = false; } /*