From a928b16e36678dc22bdb753b4663a5882435a1ad Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Wed, 22 Jun 2022 00:34:37 -0400 Subject: [PATCH] freebsd_network: Unlock the taskqueue before waiting for threads. Also set tq_threads to NULL to prevent double-frees. --- src/libs/compat/freebsd_network/taskqueue.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/libs/compat/freebsd_network/taskqueue.c b/src/libs/compat/freebsd_network/taskqueue.c index 50163c576f..85582582fc 100644 --- a/src/libs/compat/freebsd_network/taskqueue.c +++ b/src/libs/compat/freebsd_network/taskqueue.c @@ -111,7 +111,10 @@ taskqueue_terminate(struct thread **pp, struct taskqueue *tq) if (tq->tq_sem == -1) return; + TQ_UNLOCK(tq); + delete_sem(tq->tq_sem); + tq->tq_sem = -1; for (int i = 0; i < tq->tq_threadcount; i++) { status_t status; @@ -120,6 +123,9 @@ taskqueue_terminate(struct thread **pp, struct taskqueue *tq) if (tq->tq_threadcount > 1) free(tq->tq_threads); + tq->tq_threads = NULL; + + TQ_LOCK(tq); }