提交 a5e1c4b5 编写于 作者: D dapan1121

fix: fix qworker destroy issue

上级 479218fb
...@@ -205,6 +205,7 @@ typedef struct SQWorker { ...@@ -205,6 +205,7 @@ typedef struct SQWorker {
SHashObj *ctxHash; // key: queryId+taskId, value: SQWTaskCtx SHashObj *ctxHash; // key: queryId+taskId, value: SQWTaskCtx
SMsgCb msgCb; SMsgCb msgCb;
SQWStat stat; SQWStat stat;
int32_t *destroyed;
} SQWorker; } SQWorker;
typedef struct SQWorkerMgmt { typedef struct SQWorkerMgmt {
......
...@@ -485,6 +485,8 @@ void qwDestroyImpl(void *pMgmt) { ...@@ -485,6 +485,8 @@ void qwDestroyImpl(void *pMgmt) {
} }
taosHashCleanup(mgmt->schHash); taosHashCleanup(mgmt->schHash);
*mgmt->destroyed = 1;
taosMemoryFree(mgmt); taosMemoryFree(mgmt);
atomic_sub_fetch_32(&gQwMgmt.qwNum, 1); atomic_sub_fetch_32(&gQwMgmt.qwNum, 1);
......
...@@ -1114,10 +1114,17 @@ void qWorkerDestroy(void **qWorkerMgmt) { ...@@ -1114,10 +1114,17 @@ void qWorkerDestroy(void **qWorkerMgmt) {
return; return;
} }
int32_t destroyed = 0;
SQWorker *mgmt = *qWorkerMgmt; SQWorker *mgmt = *qWorkerMgmt;
mgmt->destroyed = &destroyed;
if (taosRemoveRef(gQwMgmt.qwRef, mgmt->refId)) { if (taosRemoveRef(gQwMgmt.qwRef, mgmt->refId)) {
qError("remove qw from ref list failed, refId:%" PRIx64, mgmt->refId); qError("remove qw from ref list failed, refId:%" PRIx64, mgmt->refId);
return;
}
while (0 == destroyed) {
taosMsleep(2);
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册