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:
Shengliang Guan 2024-11-19 14:27:42 +08:00 committed by GitHub
commit 82b20df9ab
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 7 additions and 5 deletions

View File

@ -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));