Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 3aadd7a

Browse files
author
Alexander Korotkov
committed
Add more assertions in hope to find floating bug.
1 parent cdb2033 commit 3aadd7a

File tree

1 file changed

+32
-7
lines changed

1 file changed

+32
-7
lines changed

src/backend/access/heap/heapam.c

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2621,6 +2621,9 @@ heap_page_xid_min_max(Page page, bool multi,
26212621
if (!HeapTupleHeaderXminFrozen(htup) &&
26222622
TransactionIdIsNormal(htup->t_choice.t_heap.t_xmin))
26232623
{
2624+
Assert(htup->t_choice.t_heap.t_xmin >= FirstNormalTransactionId);
2625+
Assert(htup->t_choice.t_heap.t_xmin <= MaxShortTransactionId);
2626+
26242627
if (!found)
26252628
{
26262629
*min = *max = htup->t_choice.t_heap.t_xmin;
@@ -2636,6 +2639,9 @@ heap_page_xid_min_max(Page page, bool multi,
26362639
if (TransactionIdIsNormal(htup->t_choice.t_heap.t_xmax) &&
26372640
!(htup->t_infomask & HEAP_XMAX_IS_MULTI))
26382641
{
2642+
Assert(htup->t_choice.t_heap.t_xmax >= FirstNormalTransactionId);
2643+
Assert(htup->t_choice.t_heap.t_xmax <= MaxShortTransactionId);
2644+
26392645
if (!found)
26402646
{
26412647
*min = *max = htup->t_choice.t_heap.t_xmax;
@@ -2653,6 +2659,9 @@ heap_page_xid_min_max(Page page, bool multi,
26532659
if (TransactionIdIsNormal(htup->t_choice.t_heap.t_xmax) &&
26542660
(htup->t_infomask & HEAP_XMAX_IS_MULTI))
26552661
{
2662+
Assert(htup->t_choice.t_heap.t_xmax >= FirstNormalTransactionId);
2663+
Assert(htup->t_choice.t_heap.t_xmax <= MaxShortTransactionId);
2664+
26562665
if (!found)
26572666
{
26582667
*min = *max = htup->t_choice.t_heap.t_xmax;
@@ -2896,11 +2905,15 @@ heap_page_prepare_for_xid(Relation relation, Buffer buffer,
28962905

28972906
delta = (int64) (xid - FirstNormalTransactionId) - (int64) base;
28982907

2908+
Assert(xid >= base + delta + FirstNormalTransactionId);
2909+
Assert(xid <= base + delta + MaxShortTransactionId);
2910+
28992911
heap_page_shift_base(relation, buffer, page, multi, delta);
29002912
MarkBufferDirty(buffer);
29012913

29022914
base = multi ? pageSpecial->pd_multi_base : pageSpecial->pd_xid_base;
2903-
Assert(xid >= base + FirstNormalTransactionId && xid <= base + MaxShortTransactionId);
2915+
Assert(xid >= base + FirstNormalTransactionId);
2916+
Assert(xid <= base + MaxShortTransactionId);
29042917
return false;
29052918
}
29062919

@@ -2912,12 +2925,17 @@ heap_page_prepare_for_xid(Relation relation, Buffer buffer,
29122925

29132926
if (requiredDelta <= freeDelta)
29142927
{
2915-
heap_page_shift_base(relation, buffer,
2916-
page, multi, - (freeDelta + requiredDelta) / 2);
2928+
int64 delta = - (freeDelta + requiredDelta) / 2;
2929+
2930+
Assert(xid >= base + delta + FirstNormalTransactionId);
2931+
Assert(xid <= base + delta + MaxShortTransactionId);
2932+
2933+
heap_page_shift_base(relation, buffer, page, multi, delta);
29172934
MarkBufferDirty(buffer);
29182935

29192936
base = multi ? pageSpecial->pd_multi_base : pageSpecial->pd_xid_base;
2920-
Assert(xid >= base + FirstNormalTransactionId && xid <= base + MaxShortTransactionId);
2937+
Assert(xid >= base + FirstNormalTransactionId);
2938+
Assert(xid <= base + MaxShortTransactionId);
29212939
return true;
29222940
}
29232941
}
@@ -2926,14 +2944,21 @@ heap_page_prepare_for_xid(Relation relation, Buffer buffer,
29262944
int64 freeDelta = min - FirstNormalTransactionId,
29272945
requiredDelta = xid - (base + MaxShortTransactionId);
29282946

2947+
Assert(xid > base + MaxShortTransactionId);
2948+
29292949
if (requiredDelta <= freeDelta)
29302950
{
2931-
heap_page_shift_base(relation, buffer,
2932-
page, multi, (freeDelta + requiredDelta) / 2);
2951+
int64 delta = (freeDelta + requiredDelta) / 2;
2952+
2953+
Assert(xid >= base + delta + FirstNormalTransactionId);
2954+
Assert(xid <= base + delta + MaxShortTransactionId);
2955+
2956+
heap_page_shift_base(relation, buffer, page, multi, delta);
29332957
MarkBufferDirty(buffer);
29342958

29352959
base = multi ? pageSpecial->pd_multi_base : pageSpecial->pd_xid_base;
2936-
Assert(xid >= base + FirstNormalTransactionId && xid <= base + MaxShortTransactionId);
2960+
Assert(xid >= base + FirstNormalTransactionId);
2961+
Assert(xid <= base + MaxShortTransactionId);
29372962
return true;
29382963
}
29392964
}

0 commit comments

Comments
 (0)