]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
output api: complete shutdown functions
authorVictor Julien <victor@inliniac.net>
Thu, 10 Apr 2014 07:43:50 +0000 (09:43 +0200)
committerVictor Julien <victor@inliniac.net>
Thu, 10 Apr 2014 07:43:50 +0000 (09:43 +0200)
Add missing function for Filedata API. Clean up list in all functions.

src/output-file.c
src/output-filedata.c
src/output-filedata.h
src/output-packet.c
src/output-tx.c

index c9a71444d339c5252b387dd58be633065ec5ec67..0a99b060386ff63862b6ca18144961626a7a7f3b 100644 (file)
@@ -241,8 +241,10 @@ static TmEcode OutputFileLogThreadDeinit(ThreadVars *tv, void *thread_data) {
             tm_module->ThreadDeinit(tv, store->thread_data);
         }
 
+        OutputLoggerThreadStore *next_store = store->next;
+        SCFree(store);
+        store = next_store;
         logger = logger->next;
-        store = store->next;
     }
     return TM_ECODE_OK;
 }
@@ -282,8 +284,10 @@ void OutputFileShutdown(void)
 {
     OutputFileLogger *logger = list;
     while (logger) {
-        if (logger->output_ctx != NULL && logger->output_ctx->DeInit != NULL)
-            logger->output_ctx->DeInit(logger->output_ctx);
-        logger = logger->next;
+        OutputFileLogger *next_logger = logger->next;
+        SCFree(logger);
+        logger = next_logger;
     }
+
+    list = NULL;
 }
index d0770cfa57ee8d3af726452d51ebf53bd21b2eef..946b601f79aff1e0d0a7492f854b8a0c55e8e8c4 100644 (file)
@@ -396,8 +396,10 @@ static TmEcode OutputFiledataLogThreadDeinit(ThreadVars *tv, void *thread_data)
             tm_module->ThreadDeinit(tv, store->thread_data);
         }
 
+        OutputLoggerThreadStore *next_store = store->next;
+        SCFree(store);
+        store = next_store;
         logger = logger->next;
-        store = store->next;
     }
 
     SCMutexLock(&g_waldo_mutex);
@@ -444,3 +446,15 @@ void TmModuleFiledataLoggerRegister (void) {
 
     SC_ATOMIC_INIT(file_id);
 }
+
+void OutputFiledataShutdown(void)
+{
+    OutputFiledataLogger *logger = list;
+    while (logger) {
+        OutputFiledataLogger *next_logger = logger->next;
+        SCFree(logger);
+        logger = next_logger;
+    }
+
+    list = NULL;
+}
index 334ad60d239c6473c64f7f087a587c5663a9bb02..8900cd489df6823527e10593cbefafd3b57df06b 100644 (file)
@@ -45,4 +45,6 @@ int OutputRegisterFiledataLogger(const char *name, FiledataLogger LogFunc, Outpu
 
 void TmModuleFiledataLoggerRegister (void);
 
+void OutputFiledataShutdown(void);
+
 #endif /* __OUTPUT_FILE_H__ */
index d575232d8ae38f5595191801d2bf1f371ca08283..3f96f8eb56f4ec2e05dc2155b59082632a2da37b 100644 (file)
@@ -181,8 +181,11 @@ static TmEcode OutputPacketLogThreadDeinit(ThreadVars *tv, void *thread_data) {
             tm_module->ThreadDeinit(tv, store->thread_data);
         }
 
+        OutputLoggerThreadStore *next_store = store->next;
+        SCFree(store);
+        store = next_store;
+
         logger = logger->next;
-        store = store->next;
     }
     return TM_ECODE_OK;
 }
@@ -222,11 +225,11 @@ void OutputPacketShutdown(void)
 {
     OutputPacketLogger *logger = list;
     while (logger) {
-        if (logger->output_ctx != NULL && logger->output_ctx->DeInit != NULL)
-            logger->output_ctx->DeInit(logger->output_ctx);
-        logger = logger->next;
+        OutputPacketLogger *next_logger = logger->next;
+        SCFree(logger);
+        logger = next_logger;
     }
 
-    /* FIXME */
+    /* reset list pointer */
     list = NULL;
 }
index 3322277d2519642510708858276737842d2b692e..06c20823c1be91e8f355ba06c711e4c60a7463d2 100644 (file)
@@ -248,8 +248,10 @@ static TmEcode OutputTxLogThreadDeinit(ThreadVars *tv, void *thread_data) {
             tm_module->ThreadDeinit(tv, store->thread_data);
         }
 
+        OutputLoggerThreadStore *next_store = store->next;
+        SCFree(store);
+        store = next_store;
         logger = logger->next;
-        store = store->next;
     }
     return TM_ECODE_OK;
 }
@@ -289,8 +291,9 @@ void OutputTxShutdown(void)
 {
     OutputTxLogger *logger = list;
     while (logger) {
-        if (logger->output_ctx != NULL && logger->output_ctx->DeInit != NULL)
-            logger->output_ctx->DeInit(logger->output_ctx);
-        logger = logger->next;
+        OutputTxLogger *next_logger = logger->next;
+        SCFree(logger);
+        logger = next_logger;
     }
+    list = NULL;
 }