diff --git a/src/vnode/main/src/vnodeMain.c b/src/vnode/main/src/vnodeMain.c index 1be9bbb64be2807c3c44d3ca83d789b82f563bb7..4054e85a56d6b982232c104fcc7d9b865e67afaf 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);