]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
packetpool: signal waiter within lock 9727/head
authorVictor Julien <vjulien@oisf.net>
Thu, 14 Sep 2023 04:49:31 +0000 (06:49 +0200)
committerVictor Julien <victor@inliniac.net>
Wed, 1 Nov 2023 05:50:27 +0000 (06:50 +0100)
Needed for predictable scheduling. From pthread_cond_signal man page:

"The pthread_cond_signal() or pthread_cond_broadcast() functions may
 be called by a thread whether or not it currently owns the mutex that
 threads calling pthread_cond_wait() or pthread_cond_timedwait() have
 associated with the condition variable during their waits; however, if
 predictable scheduling behaviour is required, then that mutex is locked
 by the thread calling pthread_cond_signal() or pthread_cond_broadcast()."

src/tmqh-packetpool.c

index 411af684ee2e04526db71276df5a76046a7f17f0..85946517953a2cc8a6fe037e6be68ee36e55a405 100644 (file)
@@ -193,8 +193,8 @@ void PacketPoolReturnPacket(Packet *p)
                 my_pool->pending_tail->next = pool->return_stack.head;
                 pool->return_stack.head = my_pool->pending_head;
                 SC_ATOMIC_RESET(pool->return_stack.sync_now);
-                SCMutexUnlock(&pool->return_stack.mutex);
                 SCCondSignal(&pool->return_stack.cond);
+                SCMutexUnlock(&pool->return_stack.mutex);
                 /* Clear the list of pending packets to return. */
                 my_pool->pending_pool = NULL;
                 my_pool->pending_head = NULL;