From 353109cd5367d3681a8c8dd0b999e2ba423e0e39 Mon Sep 17 00:00:00 2001 From: Shengliang Guan Date: Fri, 12 Aug 2022 17:25:08 +0800 Subject: [PATCH] fix: deadlock of vnode if its state changed --- source/dnode/vnode/src/inc/vnodeInt.h | 2 +- source/dnode/vnode/src/vnd/vnodeSync.c | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/source/dnode/vnode/src/inc/vnodeInt.h b/source/dnode/vnode/src/inc/vnodeInt.h index 700c6cf8a3..02c4129d6f 100644 --- a/source/dnode/vnode/src/inc/vnodeInt.h +++ b/source/dnode/vnode/src/inc/vnodeInt.h @@ -308,7 +308,7 @@ struct SVnode { SSink* pSink; tsem_t canCommit; int64_t sync; - SRWLatch lock; + TdThreadMutex lock; bool blocked; bool restored; tsem_t syncSem; diff --git a/source/dnode/vnode/src/vnd/vnodeSync.c b/source/dnode/vnode/src/vnd/vnodeSync.c index 50d32f5f5e..fdd930ebd8 100644 --- a/source/dnode/vnode/src/vnd/vnodeSync.c +++ b/source/dnode/vnode/src/vnd/vnodeSync.c @@ -28,14 +28,14 @@ static inline bool vnodeIsMsgWeak(tmsg_t type) { return false; } static inline void vnodeWaitBlockMsg(SVnode *pVnode, const SRpcMsg *pMsg) { if (vnodeIsMsgBlock(pMsg->msgType)) { const STraceId *trace = &pMsg->info.traceId; - taosWLockLatch(&pVnode->lock); + taosThreadMutexLock(&pVnode->lock); if (!pVnode->blocked) { vGTrace("vgId:%d, msg:%p wait block, type:%s", pVnode->config.vgId, pMsg, TMSG_INFO(pMsg->msgType)); pVnode->blocked = true; - taosWUnLockLatch(&pVnode->lock); + taosThreadMutexUnlock(&pVnode->lock); tsem_wait(&pVnode->syncSem); } else { - taosWUnLockLatch(&pVnode->lock); + taosThreadMutexUnlock(&pVnode->lock); } } } @@ -43,13 +43,13 @@ static inline void vnodeWaitBlockMsg(SVnode *pVnode, const SRpcMsg *pMsg) { static inline void vnodePostBlockMsg(SVnode *pVnode, const SRpcMsg *pMsg) { if (vnodeIsMsgBlock(pMsg->msgType)) { const STraceId *trace = &pMsg->info.traceId; - taosWLockLatch(&pVnode->lock); + taosThreadMutexLock(&pVnode->lock); if (pVnode->blocked) { vGTrace("vgId:%d, msg:%p post block, type:%s", pVnode->config.vgId, pMsg, TMSG_INFO(pMsg->msgType)); pVnode->blocked = false; tsem_post(&pVnode->syncSem); } - taosWUnLockLatch(&pVnode->lock); + taosThreadMutexUnlock(&pVnode->lock); } } @@ -685,12 +685,12 @@ static void vnodeBecomeFollower(struct SSyncFSM *pFsm) { vDebug("vgId:%d, become follower", pVnode->config.vgId); // clear old leader resource - taosWLockLatch(&pVnode->lock); + taosThreadMutexLock(&pVnode->lock); if (pVnode->blocked) { pVnode->blocked = false; tsem_post(&pVnode->syncSem); } - taosWUnLockLatch(&pVnode->lock); + taosThreadMutexUnlock(&pVnode->lock); } static void vnodeBecomeLeader(struct SSyncFSM *pFsm) {