mirror of
https://github.com/postgres/postgres.git
synced 2025-05-01 01:04:50 +03:00
Fix page modification outside of critical section in GIN
By oversight 52ac6cd2d0 makes ginDeletePage() sets pd_prune_xid of page to be deleted before entering the critical section. It appears that only versions 11 and later were affected by this oversight. Backpatch-through: 11
This commit is contained in:
parent
32ca32d0be
commit
b107140804
@ -153,9 +153,6 @@ ginDeletePage(GinVacuumState *gvs, BlockNumber deleteBlkno, BlockNumber leftBlkn
|
|||||||
page = BufferGetPage(dBuffer);
|
page = BufferGetPage(dBuffer);
|
||||||
rightlink = GinPageGetOpaque(page)->rightlink;
|
rightlink = GinPageGetOpaque(page)->rightlink;
|
||||||
|
|
||||||
/* For deleted page remember last xid which could knew its address */
|
|
||||||
GinPageSetDeleteXid(page, ReadNewTransactionId());
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Any insert which would have gone on the leaf block will now go to its
|
* Any insert which would have gone on the leaf block will now go to its
|
||||||
* right sibling.
|
* right sibling.
|
||||||
@ -168,6 +165,9 @@ ginDeletePage(GinVacuumState *gvs, BlockNumber deleteBlkno, BlockNumber leftBlkn
|
|||||||
page = BufferGetPage(lBuffer);
|
page = BufferGetPage(lBuffer);
|
||||||
GinPageGetOpaque(page)->rightlink = rightlink;
|
GinPageGetOpaque(page)->rightlink = rightlink;
|
||||||
|
|
||||||
|
/* For deleted page remember last xid which could knew its address */
|
||||||
|
GinPageSetDeleteXid(page, ReadNewTransactionId());
|
||||||
|
|
||||||
/* Delete downlink from parent */
|
/* Delete downlink from parent */
|
||||||
parentPage = BufferGetPage(pBuffer);
|
parentPage = BufferGetPage(pBuffer);
|
||||||
#ifdef USE_ASSERT_CHECKING
|
#ifdef USE_ASSERT_CHECKING
|
||||||
|
Loading…
x
Reference in New Issue
Block a user