From 8f1e170229912a16ca28279e7589dd2812e84fa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=AD=90=E7=BB=B4?= Date: Tue, 11 Jun 2024 14:36:17 +0800 Subject: [PATCH] Fix a linked list bug in void PageManagerMergeHashMapInRealtimeBuild() --- .../transam/ondemand_extreme_rto/page_redo.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/gausskernel/storage/access/transam/ondemand_extreme_rto/page_redo.cpp b/src/gausskernel/storage/access/transam/ondemand_extreme_rto/page_redo.cpp index 1dd7cea00..6d55a8d34 100644 --- a/src/gausskernel/storage/access/transam/ondemand_extreme_rto/page_redo.cpp +++ b/src/gausskernel/storage/access/transam/ondemand_extreme_rto/page_redo.cpp @@ -1144,14 +1144,18 @@ void PageManagerMergeHashMapInRealtimeBuild() { ondemand_htab_ctrl_t *procHtabCtrl = g_instance.comm_cxt.predo_cxt.redoItemHashCtrl[g_redoWorker->slotId]; ondemand_htab_ctrl_t *targetHtabCtrl = g_dispatcher->pageLines[g_redoWorker->slotId].managerThd->redoItemHashCtrl; - ondemand_htab_ctrl_t *nextHtabCtrl = procHtabCtrl; + ondemand_htab_ctrl_t *nextHtabCtrlHold = (ondemand_htab_ctrl_t *)procHtabCtrl->nextHTabCtrl; //nextHtabCtrl for hold the next HtabCtrl + ondemand_htab_ctrl_t *nextHtabCtrlFree = procHtabCtrl; //nextHtabCtrl for free space g_dispatcher->pageLines[g_redoWorker->slotId].managerThd->redoItemHashCtrl = g_instance.comm_cxt.predo_cxt.redoItemHashCtrl[g_redoWorker->slotId]; - while (nextHtabCtrl != targetHtabCtrl) { - nextHtabCtrl = (ondemand_htab_ctrl_t *)nextHtabCtrl->nextHTabCtrl; - OndemandMergeHashMap(nextHtabCtrl->hTab, procHtabCtrl->hTab); - pfree(nextHtabCtrl); + + while (nextHtabCtrlHold != NULL) { + nextHtabCtrlFree = nextHtabCtrlHold; + OndemandMergeHashMap(nextHtabCtrlHold->hTab, procHtabCtrl->hTab); + nextHtabCtrlHold = (ondemand_htab_ctrl_t *)nextHtabCtrlHold->nextHTabCtrl; + pfree(nextHtabCtrlFree); } + procHtabCtrl->nextHTabCtrl = NULL; } void PageManagerProcLsnForwarder(RedoItem *lsnForwarder)