dont delete vnode hash until the final stage, otherwise, pVnode will be freed

This commit is contained in:
Jeff Tao 2020-04-06 14:23:18 +08:00
parent f890815518
commit d4254489da
1 changed files with 6 additions and 1 deletions

View File

@ -182,6 +182,7 @@ void vnodeRelease(void *pVnodeRaw) {
} }
dTrace("pVnode:%p vgId:%d, vnode is released", pVnode, pVnode->vgId); dTrace("pVnode:%p vgId:%d, vnode is released", pVnode, pVnode->vgId);
taosDeleteIntHash(tsDnodeVnodesHash, pVnode->vgId);
tsOpennedVnodes--; tsOpennedVnodes--;
if (tsOpennedVnodes <= 0) { if (tsOpennedVnodes <= 0) {
@ -198,6 +199,11 @@ void *vnodeGetVnode(int32_t vgId) {
return NULL; 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); atomic_add_fetch_32(&pVnode->refCount, 1);
dTrace("pVnode:%p vgId:%d, get vnode, refCount:%d", pVnode, pVnode->vgId, pVnode->refCount); 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) { static void vnodeCleanUp(SVnodeObj *pVnode) {
taosDeleteIntHash(tsDnodeVnodesHash, pVnode->vgId);
//syncStop(pVnode->sync); //syncStop(pVnode->sync);
tsdbCloseRepo(pVnode->tsdb); tsdbCloseRepo(pVnode->tsdb);