From d4254489da818f3c3d9b28b2b7587c2e80e5bbc6 Mon Sep 17 00:00:00 2001 From: Jeff Tao Date: Mon, 6 Apr 2020 14:23:18 +0800 Subject: [PATCH] dont delete vnode hash until the final stage, otherwise, pVnode will be freed --- src/vnode/main/src/vnodeMain.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/vnode/main/src/vnodeMain.c b/src/vnode/main/src/vnodeMain.c index 1be9bbb64b..4054e85a56 100644 --- a/src/vnode/main/src/vnodeMain.c +++ b/src/vnode/main/src/vnodeMain.c @@ -182,6 +182,7 @@ void vnodeRelease(void *pVnodeRaw) { } dTrace("pVnode:%p vgId:%d, vnode is released", pVnode, pVnode->vgId); + taosDeleteIntHash(tsDnodeVnodesHash, pVnode->vgId); tsOpennedVnodes--; if (tsOpennedVnodes <= 0) { @@ -198,6 +199,11 @@ void *vnodeGetVnode(int32_t vgId) { return NULL; } + if (pVnode->status == VN_STATUS_CLOSING || pVnode->status == VN_STATUS_DELETING) { + terrno = TSDB_CODE_INVALID_VGROUP_ID; + return NULL; + } + atomic_add_fetch_32(&pVnode->refCount, 1); dTrace("pVnode:%p vgId:%d, get vnode, refCount:%d", pVnode, pVnode->vgId, pVnode->refCount); @@ -241,7 +247,6 @@ static void vnodeBuildVloadMsg(char *pNode, void * param) { } static void vnodeCleanUp(SVnodeObj *pVnode) { - taosDeleteIntHash(tsDnodeVnodesHash, pVnode->vgId); //syncStop(pVnode->sync); tsdbCloseRepo(pVnode->tsdb); -- GitLab