fix: acquire vnode on restart may deadlock
This commit is contained in:
parent
2d8ed7a947
commit
568c6269dc
|
@ -334,19 +334,23 @@ static int32_t vmRequire(const SMgmtInputOpt *pInput, bool *required) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int32_t vmStart(SVnodeMgmt *pMgmt) {
|
static int32_t vmStart(SVnodeMgmt *pMgmt) {
|
||||||
taosRLockLatch(&pMgmt->latch);
|
int32_t numOfVnodes = 0;
|
||||||
|
SVnodeObj **pVnodes = vmGetVnodeListFromHash(pMgmt, &numOfVnodes);
|
||||||
|
|
||||||
void *pIter = taosHashIterate(pMgmt->hash, NULL);
|
for (int32_t i = 0; i < numOfVnodes; ++i) {
|
||||||
while (pIter) {
|
SVnodeObj *pVnode = pVnodes[i];
|
||||||
SVnodeObj **ppVnode = pIter;
|
|
||||||
if (ppVnode == NULL || *ppVnode == NULL) continue;
|
|
||||||
|
|
||||||
SVnodeObj *pVnode = *ppVnode;
|
|
||||||
vnodeStart(pVnode->pImpl);
|
vnodeStart(pVnode->pImpl);
|
||||||
pIter = taosHashIterate(pMgmt->hash, pIter);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
taosRUnLockLatch(&pMgmt->latch);
|
for (int32_t i = 0; i < numOfVnodes; ++i) {
|
||||||
|
SVnodeObj *pVnode = pVnodes[i];
|
||||||
|
vmReleaseVnode(pMgmt, pVnode);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pVnodes != NULL) {
|
||||||
|
taosMemoryFree(pVnodes);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue