From 1d0de625f44d081bd32d796807ca351c413e6542 Mon Sep 17 00:00:00 2001 From: dmchen Date: Mon, 21 Oct 2024 01:32:18 +0000 Subject: [PATCH] fix/TS-5532-set-seperate-thread-update-status-fix-review --- source/dnode/mgmt/mgmt_dnode/src/dmHandle.c | 31 +++++++++++++++------ 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c b/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c index 08fd632831..e80cdf0471 100644 --- a/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c +++ b/source/dnode/mgmt/mgmt_dnode/src/dmHandle.c @@ -165,11 +165,16 @@ void dmSendStatusReq(SDnodeMgmt *pMgmt) { (void)taosThreadRwlockUnlock(&pMgmt->pData->lock); dDebug("send status req to mnode, statusSeq:%d, begin to get vnode loads", pMgmt->statusSeq); - (void)taosThreadMutexLock(&pMgmt->pData->statusInfolock); - req.pVloads = taosArrayDup(tsVinfo.pVloads, NULL); - taosArrayDestroy(tsVinfo.pVloads); + if (taosThreadMutexLock(&pMgmt->pData->statusInfolock) != 0) { + dError("failed to lock status info lock"); + return; + } + taosArraySwap(req.pVloads, tsVinfo.pVloads); tsVinfo.pVloads = NULL; - (void)taosThreadMutexUnlock(&pMgmt->pData->statusInfolock); + if (taosThreadMutexUnlock(&pMgmt->pData->statusInfolock) != 0) { + dError("failed to unlock status info lock"); + return; + } dDebug("send status req to mnode, statusSeq:%d, begin to get mnode loads", pMgmt->statusSeq); SMonMloadInfo minfo = {0}; @@ -239,10 +244,20 @@ void dmUpdateStatusInfo(SDnodeMgmt *pMgmt) { SMonVloadInfo vinfo = {0}; dDebug("begin to get vnode loads"); (*pMgmt->getVnodeLoadsFp)(&vinfo); - (void)taosThreadMutexLock(&pMgmt->pData->statusInfolock); - if (tsVinfo.pVloads == NULL) tsVinfo.pVloads = taosArrayDup(vinfo.pVloads, NULL); - taosArrayDestroy(vinfo.pVloads); - (void)taosThreadMutexUnlock(&pMgmt->pData->statusInfolock); + if (taosThreadMutexLock(&pMgmt->pData->statusInfolock) != 0) { + dError("failed to lock status info lock"); + return; + } + if (tsVinfo.pVloads == NULL) { + taosArraySwap(tsVinfo.pVloads, vinfo.pVloads); + } else { + taosArrayDestroy(vinfo.pVloads); + vinfo.pVloads = NULL; + } + if (taosThreadMutexUnlock(&pMgmt->pData->statusInfolock) != 0) { + dError("failed to unlock status info lock"); + return; + } } void dmSendNotifyReq(SDnodeMgmt *pMgmt, SNotifyReq *pReq) {