diff --git a/src/source-pcap-file.c b/src/source-pcap-file.c index c08a4d7492..0857eb6b76 100644 --- a/src/source-pcap-file.c +++ b/src/source-pcap-file.c @@ -67,6 +67,7 @@ static void CleanupPcapDirectoryFromThreadVars(PcapFileThreadVars *tv, PcapFileDirectoryVars *ptv); static void CleanupPcapFileFromThreadVars(PcapFileThreadVars *tv, PcapFileFileVars *pfv); static void CleanupPcapFileThreadVars(PcapFileThreadVars *tv); +static TmEcode PcapFileExit(TmEcode status); void CleanupPcapFileFromThreadVars(PcapFileThreadVars *tv, PcapFileFileVars *pfv) { @@ -141,6 +142,16 @@ void PcapFileGlobalInit() SC_ATOMIC_INIT(pcap_g.invalid_checksums); } +TmEcode PcapFileExit(TmEcode status) +{ + if(RunModeUnixSocketIsActive()) { + SCReturnInt(TM_ECODE_DONE); + } else { + EngineStop(); + SCReturnInt(status); + } +} + TmEcode ReceivePcapFileLoop(ThreadVars *tv, void *data, void *slot) { SCEnter(); @@ -169,29 +180,31 @@ TmEcode ReceivePcapFileLoop(ThreadVars *tv, void *data, void *slot) SCLogDebug("Pcap file loop complete with status %u", status); - if(RunModeUnixSocketIsActive()) { - SCReturnInt(TM_ECODE_DONE); - } else { - EngineStop(); - SCReturnInt(TM_ECODE_OK); - } + status = PcapFileExit(status); + + SCReturnInt(status); } TmEcode ReceivePcapFileThreadInit(ThreadVars *tv, const void *initdata, void **data) { SCEnter(); + TmEcode status = TM_ECODE_OK; const char *tmpstring = NULL; const char *tmp_bpf_string = NULL; if (initdata == NULL) { SCLogError(SC_ERR_INVALID_ARGUMENT, "error: initdata == NULL"); - SCReturnInt(TM_ECODE_FAILED); + + status = PcapFileExit(TM_ECODE_FAILED); + SCReturnInt(status); } PcapFileThreadVars *ptv = SCMalloc(sizeof(PcapFileThreadVars)); - if (unlikely(ptv == NULL)) - SCReturnInt(TM_ECODE_FAILED); + if (unlikely(ptv == NULL)) { + status = PcapFileExit(TM_ECODE_FAILED); + SCReturnInt(status); + } memset(ptv, 0, sizeof(PcapFileThreadVars)); memset(&ptv->shared.last_processed, 0, sizeof(struct timespec)); @@ -212,7 +225,9 @@ TmEcode ReceivePcapFileThreadInit(ThreadVars *tv, const void *initdata, void **d if (unlikely(ptv->shared.bpf_string == NULL)) { SCLogError(SC_ERR_MEM_ALLOC, "Failed to allocate bpf_string"); CleanupPcapFileThreadVars(ptv); - SCReturnInt(TM_ECODE_FAILED); + + status = PcapFileExit(TM_ECODE_FAILED); + SCReturnInt(status); } } @@ -220,7 +235,8 @@ TmEcode ReceivePcapFileThreadInit(ThreadVars *tv, const void *initdata, void **d SCLogInfo("Checking file or directory %s", (char*)initdata); if(PcapDetermineDirectoryOrFile((char *)initdata, &directory) == TM_ECODE_FAILED) { CleanupPcapFileThreadVars(ptv); - SCReturnInt(TM_ECODE_FAILED); + status = PcapFileExit(TM_ECODE_FAILED); + SCReturnInt(status); } if(directory == NULL) { @@ -229,7 +245,8 @@ TmEcode ReceivePcapFileThreadInit(ThreadVars *tv, const void *initdata, void **d if (unlikely(pv == NULL)) { SCLogError(SC_ERR_MEM_ALLOC, "Failed to allocate file vars"); CleanupPcapFileThreadVars(ptv); - SCReturnInt(TM_ECODE_FAILED); + status = PcapFileExit(TM_ECODE_FAILED); + SCReturnInt(status); } memset(pv, 0, sizeof(PcapFileFileVars)); @@ -238,11 +255,12 @@ TmEcode ReceivePcapFileThreadInit(ThreadVars *tv, const void *initdata, void **d SCLogError(SC_ERR_MEM_ALLOC, "Failed to allocate filename"); CleanupPcapFileFileVars(pv); CleanupPcapFileThreadVars(ptv); - SCReturnInt(TM_ECODE_FAILED); + status = PcapFileExit(TM_ECODE_FAILED); + SCReturnInt(status); } - TmEcode init_file_return = InitPcapFile(pv); - if(init_file_return == TM_ECODE_OK) { + status = InitPcapFile(pv); + if(status == TM_ECODE_OK) { pv->shared = &ptv->shared; ptv->is_directory = 0; @@ -252,7 +270,9 @@ TmEcode ReceivePcapFileThreadInit(ThreadVars *tv, const void *initdata, void **d "Failed to init pcap file %s, skipping", (char *)initdata); CleanupPcapFileFileVars(pv); CleanupPcapFileThreadVars(ptv); - SCReturnInt(init_file_return); + + status = PcapFileExit(status); + SCReturnInt(status); } } else { SCLogInfo("Argument %s was a directory", (char *)initdata); @@ -261,7 +281,8 @@ TmEcode ReceivePcapFileThreadInit(ThreadVars *tv, const void *initdata, void **d SCLogError(SC_ERR_MEM_ALLOC, "Failed to allocate directory vars"); closedir(directory); CleanupPcapFileThreadVars(ptv); - SCReturnInt(TM_ECODE_FAILED); + status = PcapFileExit(TM_ECODE_FAILED); + SCReturnInt(status); } memset(pv, 0, sizeof(PcapFileDirectoryVars)); @@ -270,7 +291,8 @@ TmEcode ReceivePcapFileThreadInit(ThreadVars *tv, const void *initdata, void **d SCLogError(SC_ERR_MEM_ALLOC, "Failed to allocate filename"); CleanupPcapFileDirectoryVars(pv); CleanupPcapFileThreadVars(ptv); - SCReturnInt(TM_ECODE_FAILED); + status = PcapFileExit(TM_ECODE_FAILED); + SCReturnInt(status); } int should_loop = 0;