fix catalog quit issue

This commit is contained in:
dapan1121 2022-06-07 09:34:47 +08:00
parent dbe1d1462d
commit 39848d24f9
2 changed files with 27 additions and 17 deletions

View File

@ -1186,14 +1186,14 @@ void catalogDestroy(void) {
atomic_store_8((int8_t*)&gCtgMgmt.exit, true); atomic_store_8((int8_t*)&gCtgMgmt.exit, true);
while (CTG_IS_LOCKED(&gCtgMgmt.lock)) {
taosUsleep(1);
}
if (tsem_post(&gCtgMgmt.queue.reqSem)) { if (tsem_post(&gCtgMgmt.queue.reqSem)) {
qError("tsem_post failed, error:%s", tstrerror(TAOS_SYSTEM_ERROR(errno))); qError("tsem_post failed, error:%s", tstrerror(TAOS_SYSTEM_ERROR(errno)));
} }
while (CTG_IS_LOCKED(&gCtgMgmt.lock)) {
taosUsleep(1);
}
CTG_LOCK(CTG_WRITE, &gCtgMgmt.lock); CTG_LOCK(CTG_WRITE, &gCtgMgmt.lock);
SCatalog *pCtg = NULL; SCatalog *pCtg = NULL;

View File

@ -1614,23 +1614,32 @@ void ctgUpdateThreadUnexpectedStopped(void) {
} }
void ctgCleanupCacheQueue(void) { void ctgCleanupCacheQueue(void) {
SCtgQNode *node = gCtgMgmt.queue.head->next; SCtgQNode *node = NULL;
SCtgQNode *nodeNext = NULL; SCtgQNode *nodeNext = NULL;
while (node) { while (true) {
if (node->op) { node = gCtgMgmt.queue.head->next;
taosMemoryFree(node->op->data); while (node) {
if (node->op->syncOp) { if (node->op) {
tsem_post(&node->op->rspSem); taosMemoryFree(node->op->data);
} else { if (node->op->syncOp) {
taosMemoryFree(node->op); tsem_post(&node->op->rspSem);
} else {
taosMemoryFree(node->op);
}
} }
nodeNext = node->next;
taosMemoryFree(node);
node = nodeNext;
} }
nodeNext = node->next; if (CTG_IS_LOCKED(&gCtgMgmt.lock)) {
taosMemoryFree(node); taosUsleep(1);
} else {
node = nodeNext; break;
}
} }
taosMemoryFreeClear(gCtgMgmt.queue.head); taosMemoryFreeClear(gCtgMgmt.queue.head);
@ -1652,6 +1661,7 @@ void* ctgUpdateThreadFunc(void* param) {
} }
if (atomic_load_8((int8_t*)&gCtgMgmt.exit)) { if (atomic_load_8((int8_t*)&gCtgMgmt.exit)) {
CTG_UNLOCK(CTG_READ, &gCtgMgmt.lock);
ctgCleanupCacheQueue(); ctgCleanupCacheQueue();
break; break;
} }