aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Munro <tmunro@postgresql.org>2019-05-09 19:11:46 +1200
committerThomas Munro <tmunro@postgresql.org>2019-05-09 20:32:26 +1200
commit47a338cfcd67139a1f91892b080934fcfc3aea03 (patch)
tree2e5559d4d29abf569b96dfba55130091bf69c5ce
parentcd805f46d857291b26ba6eb491ce11b6e0fc9ad3 (diff)
downloadpostgresql-47a338cfcd67139a1f91892b080934fcfc3aea03.tar.gz
postgresql-47a338cfcd67139a1f91892b080934fcfc3aea03.zip
Fix SxactGlobalXmin tracking.
Commit bb16aba50 broke the code that maintains SxactGlobalXmin. It could get stuck when a well-timed READ ONLY transaction runs. If SxactGlobalXmin stops advancing, transactions on the FinishedSerializableTransactions queue are never cleaned up, so resources are effectively leaked. Revert that hunk of the commit. Also revert another similar hunk that was probably harmless, but unnecessary and unjustified, relating to the DOOMED flag in case of RO_SAFE early release. Author: Thomas Munro Reported-by: Tom Lane Discussion: https://postgr.es/m/16170.1557251214%40sss.pgh.pa.us
-rw-r--r--src/backend/storage/lmgr/predicate.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/src/backend/storage/lmgr/predicate.c b/src/backend/storage/lmgr/predicate.c
index 4e4d04bae37..7f607b2bf8c 100644
--- a/src/backend/storage/lmgr/predicate.c
+++ b/src/backend/storage/lmgr/predicate.c
@@ -3438,8 +3438,7 @@ ReleasePredicateLocks(bool isCommit, bool isReadOnlySafe)
* cleanup. This means it should not be considered when calculating
* SxactGlobalXmin.
*/
- if (!isReadOnlySafe)
- MySerializableXact->flags |= SXACT_FLAG_DOOMED;
+ MySerializableXact->flags |= SXACT_FLAG_DOOMED;
MySerializableXact->flags |= SXACT_FLAG_ROLLED_BACK;
/*
@@ -3635,8 +3634,7 @@ ReleasePredicateLocks(bool isCommit, bool isReadOnlySafe)
* was launched.
*/
needToClear = false;
- if (!isReadOnlySafe &&
- TransactionIdEquals(MySerializableXact->xmin, PredXact->SxactGlobalXmin))
+ if (TransactionIdEquals(MySerializableXact->xmin, PredXact->SxactGlobalXmin))
{
Assert(PredXact->SxactGlobalXminCount > 0);
if (--(PredXact->SxactGlobalXminCount) == 0)