From 0fdffcd2af4b23a3e226ca737b510f50696828c0 Mon Sep 17 00:00:00 2001 From: Jeff Tao Date: Sat, 1 Aug 2020 14:59:32 +0000 Subject: [PATCH] remove all queues from qset when qset is closed --- src/util/src/tqueue.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/util/src/tqueue.c b/src/util/src/tqueue.c index 1482d49d5b..8c6d6243eb 100644 --- a/src/util/src/tqueue.c +++ b/src/util/src/tqueue.c @@ -240,6 +240,18 @@ taos_qset taosOpenQset() { void taosCloseQset(taos_qset param) { if (param == NULL) return; STaosQset *qset = (STaosQset *)param; + + // remove all the queues from qset + pthread_mutex_lock(&qset->mutex); + while (qset->head) { + STaosQueue *queue = qset->head; + qset->head = qset->head->next; + + queue->qset = NULL; + queue->next = NULL; + } + pthread_mutex_unlock(&qset->mutex); + pthread_mutex_destroy(&qset->mutex); tsem_destroy(&qset->sem); free(qset); @@ -312,6 +324,7 @@ void taosRemoveFromQset(taos_qset p1, taos_queue p2) { pthread_mutex_lock(&queue->mutex); atomic_sub_fetch_32(&qset->numOfItems, queue->numOfItems); queue->qset = NULL; + queue->next = NULL; pthread_mutex_unlock(&queue->mutex); } }