diff --git a/storage/innobase/row/row0purge.cc b/storage/innobase/row/row0purge.cc index 3b74b98e970..bf10b6f3d9f 100644 --- a/storage/innobase/row/row0purge.cc +++ b/storage/innobase/row/row0purge.cc @@ -657,9 +657,7 @@ static inline void row_purge_remove_multi_sec_if_poss(purge_node_t *node, [[nodiscard]] static bool row_purge_del_mark( purge_node_t *node) /*!< in/out: row purge node */ { - mem_heap_t *heap; - - heap = mem_heap_create(1024, UT_LOCATION_HERE); + mem_heap_t *heap = NULL; while (node->index != nullptr) { /* skip corrupted secondary index */ @@ -671,6 +669,10 @@ static inline void row_purge_remove_multi_sec_if_poss(purge_node_t *node, break; } + if (heap == NULL) { + heap = mem_heap_create(1024, UT_LOCATION_HERE); + } + if (node->index->type != DICT_FTS) { if (node->index->is_multi_value()) { row_purge_remove_multi_sec_if_poss(node, heap, false); @@ -686,7 +688,9 @@ static inline void row_purge_remove_multi_sec_if_poss(purge_node_t *node, node->index = node->index->next(); } - mem_heap_free(heap); + if (heap) { + mem_heap_free(heap); + } return (row_purge_remove_clust_if_poss(node)); } @@ -699,7 +703,7 @@ static inline void row_purge_remove_multi_sec_if_poss(purge_node_t *node, static void row_purge_upd_exist_or_extern_func(IF_DEBUG(const que_thr_t *thr, ) purge_node_t *node, trx_undo_rec_t *undo_rec) { - mem_heap_t *heap; + mem_heap_t *heap = NULL; ut_ad(!node->table->skip_alter_undo); @@ -708,8 +712,6 @@ static void row_purge_upd_exist_or_extern_func(IF_DEBUG(const que_thr_t *thr, ) goto skip_secondaries; } - heap = mem_heap_create(1024, UT_LOCATION_HERE); - while (node->index != nullptr) { bool non_mv_upd = false; @@ -721,6 +723,9 @@ static void row_purge_upd_exist_or_extern_func(IF_DEBUG(const que_thr_t *thr, ) break; } + if (heap == NULL) { + heap = mem_heap_create(1024, UT_LOCATION_HERE); + } #ifndef UNIV_DEBUG que_thr_t *thr = nullptr; #endif @@ -742,7 +747,9 @@ static void row_purge_upd_exist_or_extern_func(IF_DEBUG(const que_thr_t *thr, ) node->index = node->index->next(); } - mem_heap_free(heap); + if (heap) { + mem_heap_free(heap); + } skip_secondaries: