Clean up packet pool at shut down.

remotes/origin/HEAD
Victor Julien 13 years ago
parent 583ba460c4
commit 728c4f9ea0

@ -1387,7 +1387,6 @@ int main(int argc, char **argv)
} }
TmqhSetup(); TmqhSetup();
CIDRInit(); CIDRInit();
SigParsePrepare(); SigParsePrepare();
//PatternMatchPrepare(mpm_ctx, MPM_B2G); //PatternMatchPrepare(mpm_ctx, MPM_B2G);
@ -1651,23 +1650,7 @@ int main(int argc, char **argv)
} }
#endif /* OS_WIN32 */ #endif /* OS_WIN32 */
/* pre allocate packets */ PacketPoolInit(max_pending_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));
HostInitConfig(HOST_VERBOSE); HostInitConfig(HOST_VERBOSE);
FlowInitConfig(FLOW_VERBOSE); FlowInitConfig(FLOW_VERBOSE);
@ -1966,9 +1949,9 @@ int main(int argc, char **argv)
TimeDeinit(); TimeDeinit();
SCProtoNameDeInit(); SCProtoNameDeInit();
DefragDestroy(); DefragDestroy();
TmqhPacketpoolDestroy(); PacketPoolDestroy();
MagicDeinit(); MagicDeinit();
TmqhCleanup();
TmModuleRunDeInit(); TmModuleRunDeInit();
#ifdef PROFILING #ifdef PROFILING

@ -46,6 +46,11 @@ void TmqhSetup (void) {
TmqhRingBufferRegister(); TmqhRingBufferRegister();
} }
/** \brief Clean up registration time allocs */
void TmqhCleanup(void) {
TmqhRingBufferDestroy();
}
Tmqh* TmqhGetQueueHandlerByName(char *name) { Tmqh* TmqhGetQueueHandlerByName(char *name) {
int i; int i;

@ -49,6 +49,7 @@ typedef struct Tmqh_ {
Tmqh tmqh_table[TMQH_SIZE]; Tmqh tmqh_table[TMQH_SIZE];
void TmqhSetup (void); void TmqhSetup (void);
void TmqhCleanup(void);
Tmqh* TmqhGetQueueHandlerByName(char *name); Tmqh* TmqhGetQueueHandlerByName(char *name);
#endif /* __TM_QUEUEHANDLERS_H__ */ #endif /* __TM_QUEUEHANDLERS_H__ */

@ -69,9 +69,8 @@ void TmqhPacketpoolRegister (void) {
} }
void TmqhPacketpoolDestroy (void) { void TmqhPacketpoolDestroy (void) {
if (ringbuffer != NULL) { /* doing this clean up PacketPoolDestroy now,
RingBufferDestroy(ringbuffer); * where we also clean the packets */
}
} }
int PacketPoolIsEmpty(void) { int PacketPoolIsEmpty(void) {
@ -110,6 +109,40 @@ Packet *PacketPoolGetPacket(void) {
return p; 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 *TmqhInputPacketpool(ThreadVars *t)
{ {
Packet *p = NULL; Packet *p = NULL;

@ -34,4 +34,7 @@ uint16_t PacketPoolSize(void);
void PacketPoolStorePacket(Packet *); void PacketPoolStorePacket(Packet *);
void PacketPoolWait(void); void PacketPoolWait(void);
void PacketPoolInit(intmax_t max_pending_packets);
void PacketPoolDestroy(void);
#endif /* __TMQH_PACKETPOOL_H__ */ #endif /* __TMQH_PACKETPOOL_H__ */

@ -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) { void TmqhInputRingBufferShutdownHandler(ThreadVars *tv) {
if (tv == NULL || tv->inq == NULL) { if (tv == NULL || tv->inq == NULL) {
return; return;

@ -25,5 +25,6 @@
#define __TMQH_RINGBUFFER_H__ #define __TMQH_RINGBUFFER_H__
void TmqhRingBufferRegister (void); void TmqhRingBufferRegister (void);
void TmqhRingBufferDestroy (void);
#endif /* __TMQH_RINGBUFFER_H__ */ #endif /* __TMQH_RINGBUFFER_H__ */

Loading…
Cancel
Save