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. */
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 */
memset(&fw->pq, 0, sizeof(PacketQueue));

@ -932,8 +932,7 @@ TmEcode OutputLoggerLog(ThreadVars *tv, Packet *p, void *thread_data)
return TM_ECODE_OK;
}
TmEcode OutputLoggerThreadInit(ThreadVars *tv, void *initdata,
void **data)
TmEcode OutputLoggerThreadInit(ThreadVars *tv, void *initdata, void **data)
{
LoggerThreadStore *thread_store = SCCalloc(1, sizeof(*thread_store));
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) {
LoggerThreadStoreNode *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;
TAILQ_INSERT_TAIL(thread_store, thread_store_node, entries);
}

Loading…
Cancel
Save