diff --git a/src/tmqh-packetpool.c b/src/tmqh-packetpool.c index 1f0a3ec7b9..d8d67cd5cd 100644 --- a/src/tmqh-packetpool.c +++ b/src/tmqh-packetpool.c @@ -58,23 +58,12 @@ static inline PktPool *GetThreadPacketPool(void) { return &thread_pkt_pool; } - -static inline PktPool *ThreadPacketPoolCreate(void) -{ - /* Nothing to do since __thread statically allocates the memory. */ - return GetThreadPacketPool(); -} #else /* __thread not supported. */ static pthread_key_t pkt_pool_thread_key; static SCMutex pkt_pool_thread_key_mutex = SCMUTEX_INITIALIZER; static int pkt_pool_thread_key_initialized = 0; -static inline PktPool *GetThreadPacketPool(void) -{ - return (PktPool*)pthread_getspecific(pkt_pool_thread_key); -} - static void PktPoolThreadDestroy(void * buf) { free(buf); @@ -102,15 +91,10 @@ static void TmqhPacketpoolInit(void) SCMutexUnlock(&pkt_pool_thread_key_mutex); } -static inline PktPool *ThreadPacketPoolCreate(void) +static PktPool *ThreadPacketPoolCreate(void) { TmqhPacketpoolInit(); - /* Check that the pool is not already created */ - PktPool *pool = GetThreadPacketPool(); - if (pool) - return pool; - /* Create a new pool for this thread. */ pool = (PktPool*)SCMallocAligned(sizeof(PktPool), CLS); if (pool == NULL) { @@ -125,6 +109,15 @@ static inline PktPool *ThreadPacketPoolCreate(void) return pool; } + +static inline PktPool *GetThreadPacketPool(void) +{ + PktPool* pool = (PktPool*)pthread_getspecific(pkt_pool_thread_key); + if (pool == NULL) + pool = ThreadPacketPoolCreate(); + + return pool; +} #endif /** @@ -168,6 +161,15 @@ static void PacketPoolStorePacket(Packet *p) PacketPoolReturnPacket(p); } +static void PacketPoolGetReturnedPackets(PktPool *pool) +{ + SCMutexLock(&pool->return_stack.mutex); + /* Move all the packets from the locked return stack to the local stack. */ + pool->head = pool->return_stack.head; + pool->return_stack.head = NULL; + SCMutexUnlock(&pool->return_stack.mutex); +} + /** \brief Get a new packet from the packet pool * * Only allocates from the thread's local stack, or mallocs new packets. @@ -189,11 +191,7 @@ Packet *PacketPoolGetPacket(void) /* Local Stack is empty, so check the return stack, which requires * locking. */ - SCMutexLock(&pool->return_stack.mutex); - /* Move all the packets from the locked return stack to the local stack. */ - pool->head = pool->return_stack.head; - pool->return_stack.head = NULL; - SCMutexUnlock(&pool->return_stack.mutex); + PacketPoolGetReturnedPackets(pool); /* Try to allocate again. Need to check for not empty again, since the * return stack might have been empty too. @@ -266,7 +264,7 @@ void PacketPoolInit(void) { extern intmax_t max_pending_packets; - PktPool *my_pool = ThreadPacketPoolCreate(); + PktPool *my_pool = GetThreadPacketPool(); SCMutexInit(&my_pool->return_stack.mutex, NULL);