From: Robert Haas Date: Tue, 14 Dec 2021 20:09:01 +0000 (-0500) Subject: avoid stepping on memory that's still needed X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=refs%2Fheads%2Fconveyor_old;p=users%2Frhaas%2Fpostgres.git avoid stepping on memory that's still needed --- diff --git a/src/backend/access/conveyor/cbmetapage.c b/src/backend/access/conveyor/cbmetapage.c index 2abf7cc650..15021e092b 100644 --- a/src/backend/access/conveyor/cbmetapage.c +++ b/src/backend/access/conveyor/cbmetapage.c @@ -403,12 +403,16 @@ cb_metapage_remove_index_entries(CBMetapageData *meta, unsigned count, } /* - * Return a pointer to the in-metapage index entries. + * Copy the indicated number of index entries out of the metapage. */ -CBSegNo * -cb_metapage_get_index_entry_pointer(CBMetapageData *meta) +void +cb_metapage_get_index_entries(CBMetapageData *meta, unsigned num_index_entries, + CBSegNo *index_entries) { - return meta->cbm_index; + Assert(num_index_entries <= cb_metapage_get_index_entries_used(meta)); + + memcpy(index_entries, meta->cbm_index, + num_index_entries * sizeof(CBSegNo)); } /* diff --git a/src/backend/access/conveyor/conveyor.c b/src/backend/access/conveyor/conveyor.c index 431a01c9f8..12a188884d 100644 --- a/src/backend/access/conveyor/conveyor.c +++ b/src/backend/access/conveyor/conveyor.c @@ -450,7 +450,7 @@ ConveyorBeltGetNewPage(ConveyorBelt *cb, CBPageNo *pageno) { unsigned pageoffset; unsigned num_index_entries; - CBSegNo *index_entries; + CBSegNo index_entries[CB_METAPAGE_INDEX_ENTRIES]; CBPageNo index_page_start; unsigned logical_pages_in_index_segments; unsigned index_entries_in_index_segments; @@ -468,7 +468,8 @@ ConveyorBeltGetNewPage(ConveyorBelt *cb, CBPageNo *pageno) num_index_entries = Min(CB_METAPAGE_INDEX_ENTRIES, CB_INDEXPAGE_INDEX_ENTRIES - pageoffset); - index_entries = cb_metapage_get_index_entry_pointer(meta); + cb_metapage_get_index_entries(meta, num_index_entries, + index_entries); index_page_start = index_metapage_start - pageoffset * cb->cb_pages_per_segment; cb_relocate_index_entries(cb->cb_insert_relfilenode, cb->cb_fork, diff --git a/src/include/access/cbmetapage.h b/src/include/access/cbmetapage.h index 490130c339..b7a65187bb 100644 --- a/src/include/access/cbmetapage.h +++ b/src/include/access/cbmetapage.h @@ -142,7 +142,9 @@ extern void cb_metapage_add_index_entry(CBMetapageData *meta, CBSegNo segno); extern void cb_metapage_remove_index_entries(CBMetapageData *meta, unsigned count, bool relocating); -extern CBSegNo *cb_metapage_get_index_entry_pointer(CBMetapageData *meta); +extern void cb_metapage_get_index_entries(CBMetapageData *meta, + unsigned num_index_entries, + CBSegNo *index_entries); extern void cb_metapage_get_critical_info(CBMetapageData *meta, uint16 *pages_per_segment, uint64 *index_segments_moved);