diff --git a/src/suricata.c b/src/suricata.c index afb2685e85..cedc35a48b 100644 --- a/src/suricata.c +++ b/src/suricata.c @@ -1387,7 +1387,6 @@ int main(int argc, char **argv) } TmqhSetup(); - CIDRInit(); SigParsePrepare(); //PatternMatchPrepare(mpm_ctx, MPM_B2G); @@ -1651,23 +1650,7 @@ int main(int argc, char **argv) } #endif /* OS_WIN32 */ - /* pre allocate packets */ - SCLogDebug("preallocating packets... packet size %" PRIuMAX "", (uintmax_t)SIZE_OF_PACKET); - int i = 0; - for (i = 0; i < max_pending_packets; i++) { - /* XXX pkt alloc function */ - Packet *p = SCMalloc(SIZE_OF_PACKET); - if (p == NULL) { - SCLogError(SC_ERR_FATAL, "Fatal error encountered while allocating a packet. Exiting..."); - exit(EXIT_FAILURE); - } - PACKET_INITIALIZE(p); - - PacketPoolStorePacket(p); - } - SCLogInfo("preallocated %"PRIiMAX" packets. Total memory %"PRIuMAX"", - max_pending_packets, (uintmax_t)(max_pending_packets*SIZE_OF_PACKET)); - + PacketPoolInit(max_pending_packets); HostInitConfig(HOST_VERBOSE); FlowInitConfig(FLOW_VERBOSE); @@ -1966,9 +1949,9 @@ int main(int argc, char **argv) TimeDeinit(); SCProtoNameDeInit(); DefragDestroy(); - TmqhPacketpoolDestroy(); + PacketPoolDestroy(); MagicDeinit(); - + TmqhCleanup(); TmModuleRunDeInit(); #ifdef PROFILING diff --git a/src/tm-queuehandlers.c b/src/tm-queuehandlers.c index b61a6c9e59..f2c62cfc50 100644 --- a/src/tm-queuehandlers.c +++ b/src/tm-queuehandlers.c @@ -46,6 +46,11 @@ void TmqhSetup (void) { TmqhRingBufferRegister(); } +/** \brief Clean up registration time allocs */ +void TmqhCleanup(void) { + TmqhRingBufferDestroy(); +} + Tmqh* TmqhGetQueueHandlerByName(char *name) { int i; diff --git a/src/tm-queuehandlers.h b/src/tm-queuehandlers.h index 47f540ae51..63249799ad 100644 --- a/src/tm-queuehandlers.h +++ b/src/tm-queuehandlers.h @@ -49,6 +49,7 @@ typedef struct Tmqh_ { Tmqh tmqh_table[TMQH_SIZE]; void TmqhSetup (void); +void TmqhCleanup(void); Tmqh* TmqhGetQueueHandlerByName(char *name); #endif /* __TM_QUEUEHANDLERS_H__ */ diff --git a/src/tmqh-packetpool.c b/src/tmqh-packetpool.c index 01422d3957..1e5a5cd136 100644 --- a/src/tmqh-packetpool.c +++ b/src/tmqh-packetpool.c @@ -69,9 +69,8 @@ void TmqhPacketpoolRegister (void) { } void TmqhPacketpoolDestroy (void) { - if (ringbuffer != NULL) { - RingBufferDestroy(ringbuffer); - } + /* doing this clean up PacketPoolDestroy now, + * where we also clean the packets */ } int PacketPoolIsEmpty(void) { @@ -110,6 +109,40 @@ Packet *PacketPoolGetPacket(void) { return p; } +void PacketPoolInit(intmax_t max_pending_packets) { + /* pre allocate packets */ + SCLogDebug("preallocating packets... packet size %" PRIuMAX "", (uintmax_t)SIZE_OF_PACKET); + int i = 0; + for (i = 0; i < max_pending_packets; i++) { + /* XXX pkt alloc function */ + Packet *p = SCMalloc(SIZE_OF_PACKET); + if (p == NULL) { + SCLogError(SC_ERR_FATAL, "Fatal error encountered while allocating a packet. Exiting..."); + exit(EXIT_FAILURE); + } + PACKET_INITIALIZE(p); + + PacketPoolStorePacket(p); + } + SCLogInfo("preallocated %"PRIiMAX" packets. Total memory %"PRIuMAX"", + max_pending_packets, (uintmax_t)(max_pending_packets*SIZE_OF_PACKET)); +} + +void PacketPoolDestroy(void) { + if (ringbuffer == NULL) { + return; + } + + Packet *p = NULL; + while ((p = PacketPoolGetPacket()) != NULL) { + PACKET_CLEANUP(p); + SCFree(p); + } + + RingBufferDestroy(ringbuffer); + ringbuffer = NULL; +} + Packet *TmqhInputPacketpool(ThreadVars *t) { Packet *p = NULL; diff --git a/src/tmqh-packetpool.h b/src/tmqh-packetpool.h index 04c02e93ae..b4138324f8 100644 --- a/src/tmqh-packetpool.h +++ b/src/tmqh-packetpool.h @@ -34,4 +34,7 @@ uint16_t PacketPoolSize(void); void PacketPoolStorePacket(Packet *); void PacketPoolWait(void); +void PacketPoolInit(intmax_t max_pending_packets); +void PacketPoolDestroy(void); + #endif /* __TMQH_PACKETPOOL_H__ */ diff --git a/src/tmqh-ringbuffer.c b/src/tmqh-ringbuffer.c index 6008ac28e2..5108935c4b 100644 --- a/src/tmqh-ringbuffer.c +++ b/src/tmqh-ringbuffer.c @@ -75,6 +75,13 @@ void TmqhRingBufferRegister (void) { } } +void TmqhRingBufferDestroy (void) { + int i = 0; + for (i = 0; i < 256; i++) { + RingBuffer8Destroy(ringbuffers[i]); + } +} + void TmqhInputRingBufferShutdownHandler(ThreadVars *tv) { if (tv == NULL || tv->inq == NULL) { return; diff --git a/src/tmqh-ringbuffer.h b/src/tmqh-ringbuffer.h index 039f17fa9c..f38fce9971 100644 --- a/src/tmqh-ringbuffer.h +++ b/src/tmqh-ringbuffer.h @@ -25,5 +25,6 @@ #define __TMQH_RINGBUFFER_H__ void TmqhRingBufferRegister (void); +void TmqhRingBufferDestroy (void); #endif /* __TMQH_RINGBUFFER_H__ */