fix: fix qworker destroy issue
This commit is contained in:
parent
479218fb18
commit
a5e1c4b509
|
@ -205,6 +205,7 @@ typedef struct SQWorker {
|
|||
SHashObj *ctxHash; // key: queryId+taskId, value: SQWTaskCtx
|
||||
SMsgCb msgCb;
|
||||
SQWStat stat;
|
||||
int32_t *destroyed;
|
||||
} SQWorker;
|
||||
|
||||
typedef struct SQWorkerMgmt {
|
||||
|
|
|
@ -485,6 +485,8 @@ void qwDestroyImpl(void *pMgmt) {
|
|||
}
|
||||
taosHashCleanup(mgmt->schHash);
|
||||
|
||||
*mgmt->destroyed = 1;
|
||||
|
||||
taosMemoryFree(mgmt);
|
||||
|
||||
atomic_sub_fetch_32(&gQwMgmt.qwNum, 1);
|
||||
|
|
|
@ -1114,10 +1114,17 @@ void qWorkerDestroy(void **qWorkerMgmt) {
|
|||
return;
|
||||
}
|
||||
|
||||
int32_t destroyed = 0;
|
||||
SQWorker *mgmt = *qWorkerMgmt;
|
||||
|
||||
mgmt->destroyed = &destroyed;
|
||||
|
||||
if (taosRemoveRef(gQwMgmt.qwRef, mgmt->refId)) {
|
||||
qError("remove qw from ref list failed, refId:%" PRIx64, mgmt->refId);
|
||||
return;
|
||||
}
|
||||
|
||||
while (0 == destroyed) {
|
||||
taosMsleep(2);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue