Merge pull request #28804 from taosdata/fix/TD-32914-free-vnode-after-lock
fix/TD-32914-free-vnode-after-lock
This commit is contained in:
commit
82b20df9ab
|
@ -578,16 +578,13 @@ static int32_t vmOpenVnodes(SVnodeMgmt *pMgmt) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void vmRemoveFromCreatingHash(SVnodeMgmt *pMgmt, int32_t vgId) {
|
void vmRemoveFromCreatingHash(SVnodeMgmt *pMgmt, int32_t vgId) {
|
||||||
(void)taosThreadRwlockWrlock(&pMgmt->lock);
|
|
||||||
SVnodeObj *pOld = NULL;
|
SVnodeObj *pOld = NULL;
|
||||||
|
|
||||||
|
(void)taosThreadRwlockWrlock(&pMgmt->lock);
|
||||||
int32_t r = taosHashGetDup(pMgmt->creatingHash, &vgId, sizeof(int32_t), (void *)&pOld);
|
int32_t r = taosHashGetDup(pMgmt->creatingHash, &vgId, sizeof(int32_t), (void *)&pOld);
|
||||||
if (r != 0) {
|
if (r != 0) {
|
||||||
dError("vgId:%d, failed to get vnode from creating Hash", vgId);
|
dError("vgId:%d, failed to get vnode from creating Hash", vgId);
|
||||||
}
|
}
|
||||||
if (pOld) {
|
|
||||||
dTrace("vgId:%d, free vnode pOld:%p", vgId, &pOld);
|
|
||||||
vmFreeVnodeObj(&pOld);
|
|
||||||
}
|
|
||||||
dTrace("vgId:%d, remove from creating Hash", vgId);
|
dTrace("vgId:%d, remove from creating Hash", vgId);
|
||||||
r = taosHashRemove(pMgmt->creatingHash, &vgId, sizeof(int32_t));
|
r = taosHashRemove(pMgmt->creatingHash, &vgId, sizeof(int32_t));
|
||||||
if (r != 0) {
|
if (r != 0) {
|
||||||
|
@ -595,6 +592,11 @@ void vmRemoveFromCreatingHash(SVnodeMgmt *pMgmt, int32_t vgId) {
|
||||||
}
|
}
|
||||||
(void)taosThreadRwlockUnlock(&pMgmt->lock);
|
(void)taosThreadRwlockUnlock(&pMgmt->lock);
|
||||||
|
|
||||||
|
if (pOld) {
|
||||||
|
dTrace("vgId:%d, free vnode pOld:%p", vgId, &pOld);
|
||||||
|
vmFreeVnodeObj(&pOld);
|
||||||
|
}
|
||||||
|
|
||||||
_OVER:
|
_OVER:
|
||||||
if (r != 0) {
|
if (r != 0) {
|
||||||
dError("vgId:%d, failed to remove vnode from creatingHash since %s", vgId, tstrerror(r));
|
dError("vgId:%d, failed to remove vnode from creatingHash since %s", vgId, tstrerror(r));
|
||||||
|
|
Loading…
Reference in New Issue