0001-Fix-HeapCheckForSerializableConflictOut-bug.patch

application/octet-stream

Filename: 0001-Fix-HeapCheckForSerializableConflictOut-bug.patch
Type: application/octet-stream
Part: 0
Message: Re: Potential G2-item cycles under serializable isolation

Patch

Format: format-patch
Series: patch 0001
Subject: Fix HeapCheckForSerializableConflictOut() bug
File+
src/backend/access/heap/heapam.c 4 7
From e298b558dae78e99affdd836406909763d1f3764 Mon Sep 17 00:00:00 2001
From: Peter Geoghegan <pg@bowt.ie>
Date: Sun, 7 Jun 2020 19:15:48 -0700
Subject: [PATCH] Fix HeapCheckForSerializableConflictOut() bug

---
 src/backend/access/heap/heapam.c | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index 94eb37d48d..6d78756afa 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -9017,15 +9017,12 @@ HeapCheckForSerializableConflictOut(bool visible, Relation relation,
 			xid = HeapTupleHeaderGetXmin(tuple->t_data);
 			break;
 		case HEAPTUPLE_RECENTLY_DEAD:
-			if (!visible)
-				return;
-			xid = HeapTupleHeaderGetUpdateXid(tuple->t_data);
-			break;
 		case HEAPTUPLE_DELETE_IN_PROGRESS:
-			xid = HeapTupleHeaderGetUpdateXid(tuple->t_data);
-			break;
 		case HEAPTUPLE_INSERT_IN_PROGRESS:
-			xid = HeapTupleHeaderGetXmin(tuple->t_data);
+			if (!visible)
+				xid = HeapTupleHeaderGetXmin(tuple->t_data);
+			else
+				xid = HeapTupleHeaderGetUpdateXid(tuple->t_data);
 			break;
 		case HEAPTUPLE_DEAD:
 			return;
-- 
2.25.1