From 09ea42fa68d9a1c88e864555e69474d976331861 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Mon, 21 Mar 2022 15:48:59 -0400 Subject: [PATCH] freebsd_network: Rearrange taskqueue_block functions and add NULL checks. Should fix #17218. --- src/libs/compat/freebsd_network/taskqueue.c | 50 ++++++++++++--------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/src/libs/compat/freebsd_network/taskqueue.c b/src/libs/compat/freebsd_network/taskqueue.c index b7e5f8c206..b6cb0e11cd 100644 --- a/src/libs/compat/freebsd_network/taskqueue.c +++ b/src/libs/compat/freebsd_network/taskqueue.c @@ -434,6 +434,34 @@ taskqueue_cancel_timeout(struct taskqueue *queue, } +void +taskqueue_block(struct taskqueue *taskQueue) +{ + if (taskQueue == NULL) + return; + + tq_lock(taskQueue); + taskQueue->tq_flags |= TQ_FLAGS_BLOCKED; + tq_unlock(taskQueue); +} + + +void +taskqueue_unblock(struct taskqueue *taskQueue) +{ + if (taskQueue == NULL) + return; + + tq_lock(taskQueue); + taskQueue->tq_flags &= ~TQ_FLAGS_BLOCKED; + if (taskQueue->tq_flags & TQ_FLAGS_PENDING) { + taskQueue->tq_flags &= ~TQ_FLAGS_PENDING; + taskQueue->tq_enqueue(taskQueue->tq_arg); + } + tq_unlock(taskQueue); +} + + void taskqueue_thread_enqueue(void *context) { @@ -554,25 +582,3 @@ uninit_taskqueues() if (HAIKU_DRIVER_REQUIRES(FBSD_FAST_TASKQUEUE)) taskqueue_free(taskqueue_fast); } - - -void -taskqueue_block(struct taskqueue *taskQueue) -{ - tq_lock(taskQueue); - taskQueue->tq_flags |= TQ_FLAGS_BLOCKED; - tq_unlock(taskQueue); -} - - -void -taskqueue_unblock(struct taskqueue *taskQueue) -{ - tq_lock(taskQueue); - taskQueue->tq_flags &= ~TQ_FLAGS_BLOCKED; - if (taskQueue->tq_flags & TQ_FLAGS_PENDING) { - taskQueue->tq_flags &= ~TQ_FLAGS_PENDING; - taskQueue->tq_enqueue(taskQueue->tq_arg); - } - tq_unlock(taskQueue); -}