Prevent idle in transaction session timeout from sometimes being ignored.
authorAndres Freund <andres@anarazel.de>
Wed, 11 Oct 2017 19:03:26 +0000 (12:03 -0700)
committerAndres Freund <andres@anarazel.de>
Wed, 11 Oct 2017 21:02:41 +0000 (14:02 -0700)
commitf676616651c83b14e1d879fbfabdd3ab2dc70bbe
tree9c46c709ca14ee81286274cc58ee1602f996bba7
parent28605968322b70a7efe1cc89595d1cfc557d80b9
Prevent idle in transaction session timeout from sometimes being ignored.

The previous coding in ProcessInterrupts() could lead to
idle_in_transaction_session_timeout being ignored, when
statement_timeout occurred earlier.

The problem was that ProcessInterrupts() would return before
processing the transaction timeout if QueryCancelPending was set while
QueryCancelHoldoffCount != 0 - which is the case when reading new
commands from the client. Ergo when the idle transaction timeout would
hit.

Fix that by removing the early return. Alternatively the transaction
timeout code could have been moved up, but that early return seems
like an issue that could hit other cases too.

Author: Lukas Fittl
Bug: #14821
Discussion:
    https://www.postgresql.org/message-id/20170921010956.17345.61461%40wrigleys.postgresql.org
    https://www.postgresql.org/message-id/CAP53PkxQnv3OWJpyNPGJYT62uY=n1=2CF_Lpc6gVOFnc0-gazw@mail.gmail.com
Backpatch: 9.6-, where idle_in_transaction_session_timeout was introduced.
src/backend/tcop/postgres.c