Merge pull request #17022 from taosdata/fix/TD-18148
fix: change qworker async destroy issue
This commit is contained in:
commit
7109800ef3
|
@ -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) {
|
||||||
}
|
}
|
||||||
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) {
|
||||||
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue