logging: proper failure on memory allocation error

unwinds all previous logger allocations
pull/2245/head
Jason Ish 9 years ago committed by Victor Julien
parent a1de7e6dae
commit 108d37a52d

@ -94,7 +94,9 @@ static TmEcode FlowWorkerThreadInit(ThreadVars *tv, void *initdata, void **data)
} }
/* Setup outputs for this thread. */ /* Setup outputs for this thread. */
OutputLoggerThreadInit(tv, initdata, &fw->output_thread); if (OutputLoggerThreadInit(tv, initdata, &fw->output_thread) != TM_ECODE_OK) {
return TM_ECODE_FAILED;
}
/* setup pq for stream end pkts */ /* setup pq for stream end pkts */
memset(&fw->pq, 0, sizeof(PacketQueue)); memset(&fw->pq, 0, sizeof(PacketQueue));

@ -932,8 +932,7 @@ TmEcode OutputLoggerLog(ThreadVars *tv, Packet *p, void *thread_data)
return TM_ECODE_OK; return TM_ECODE_OK;
} }
TmEcode OutputLoggerThreadInit(ThreadVars *tv, void *initdata, TmEcode OutputLoggerThreadInit(ThreadVars *tv, void *initdata, void **data)
void **data)
{ {
LoggerThreadStore *thread_store = SCCalloc(1, sizeof(*thread_store)); LoggerThreadStore *thread_store = SCCalloc(1, sizeof(*thread_store));
if (thread_store == NULL) { if (thread_store == NULL) {
@ -950,7 +949,12 @@ TmEcode OutputLoggerThreadInit(ThreadVars *tv, void *initdata,
if (logger->ThreadInit(tv, initdata, &child_thread_data) == TM_ECODE_OK) { if (logger->ThreadInit(tv, initdata, &child_thread_data) == TM_ECODE_OK) {
LoggerThreadStoreNode *thread_store_node = LoggerThreadStoreNode *thread_store_node =
SCCalloc(1, sizeof(*thread_store_node)); SCCalloc(1, sizeof(*thread_store_node));
BUG_ON(thread_store_node == NULL); if (thread_store_node == NULL) {
/* Undo everything, calling de-init will take care
* of that. */
OutputLoggerThreadDeinit(tv, thread_store);
return TM_ECODE_FAILED;
}
thread_store_node->thread_data = child_thread_data; thread_store_node->thread_data = child_thread_data;
TAILQ_INSERT_TAIL(thread_store, thread_store_node, entries); TAILQ_INSERT_TAIL(thread_store, thread_store_node, entries);
} }

Loading…
Cancel
Save