diff options
-rw-r--r-- | src/backend/storage/lmgr/predicate.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/backend/storage/lmgr/predicate.c b/src/backend/storage/lmgr/predicate.c index 96f6c23a0f..5fec4b60f0 100644 --- a/src/backend/storage/lmgr/predicate.c +++ b/src/backend/storage/lmgr/predicate.c @@ -2689,7 +2689,7 @@ OnConflict_CheckForSerializationFailure(const SERIALIZABLEXACT *reader, offsetof(RWConflictData, outLink)); while (conflict) { - if (reader == conflict->sxactIn + if ((reader == conflict->sxactIn && SxactIsCommitted(reader)) || (SxactIsCommitted(conflict->sxactIn) && !SxactIsCommitted(reader) && (!SxactIsReadOnly(reader) @@ -2783,9 +2783,10 @@ PreCommit_CheckForSerializationFailure(void) offsetof(RWConflictData, inLink)); while (farConflict) { - if (!SxactIsCommitted(farConflict->sxactOut) - && !SxactIsReadOnly(farConflict->sxactOut) - && !SxactIsRolledBack(farConflict->sxactOut)) + if (farConflict->sxactOut == MySerializableXact + || (!SxactIsCommitted(farConflict->sxactOut) + && !SxactIsReadOnly(farConflict->sxactOut) + && !SxactIsRolledBack(farConflict->sxactOut))) { nearConflict->sxactOut->flags |= SXACT_FLAG_INTERRUPT; CancelVirtualTransaction(nearConflict->sxactOut->tag.vxid, 0); |