diff --git a/src/source-nfq.c b/src/source-nfq.c index 7c4bab4bf3..eba9763eec 100644 --- a/src/source-nfq.c +++ b/src/source-nfq.c @@ -503,6 +503,7 @@ TmEcode ReceiveNFQThreadInit(ThreadVars *tv, void *initdata, void **data) { TmEcode ReceiveNFQThreadDeinit(ThreadVars *t, void *data) { NFQThreadVars *ntv = (NFQThreadVars *)data; + NFQQueueVars *nq = NFQGetQueue(ntv->nfq_index); if (ntv->data != NULL) { SCFree(ntv->data); @@ -510,6 +511,14 @@ TmEcode ReceiveNFQThreadDeinit(ThreadVars *t, void *data) } ntv->datalen = 0; + SCMutexLock(&nfq_init_lock); + SCLogDebug("starting... will close queuenum %" PRIu32 "", nq->queue_num); + if (nq->qh) { + nfq_destroy_queue(nq->qh); + nq->qh = NULL; + } + SCMutexUnlock(&nfq_init_lock); + return TM_ECODE_OK; } @@ -526,9 +535,12 @@ TmEcode VerdictNFQThreadDeinit(ThreadVars *tv, void *data) { NFQQueueVars *nq = NFQGetQueue(ntv->nfq_index); SCLogDebug("starting... will close queuenum %" PRIu32 "", nq->queue_num); + SCMutexLock(&nfq_init_lock); if (nq->qh) { nfq_destroy_queue(nq->qh); + nq->qh = NULL; } + SCMutexUnlock(&nfq_init_lock); return TM_ECODE_OK; }