diff --git a/src/runmode-unix-socket.c b/src/runmode-unix-socket.c index 8b7276cd4f..93494de123 100644 --- a/src/runmode-unix-socket.c +++ b/src/runmode-unix-socket.c @@ -67,6 +67,7 @@ const char *RunModeUnixSocketGetDefaultMode(void) #ifdef BUILD_UNIX_SOCKET +static int RunModeUnixSocketSingle(void); static int unix_manager_file_task_running = 0; static int unix_manager_file_task_failed = 0; @@ -1007,14 +1008,17 @@ TmEcode UnixSocketHostbitList(json_t *cmd, json_t* answer, void *data_unused) } #endif /* BUILD_UNIX_SOCKET */ +#ifdef BUILD_UNIX_SOCKET /** * \brief Single thread version of the Pcap file processing. */ -int RunModeUnixSocketSingle(void) +static int RunModeUnixSocketSingle(void) { -#ifdef BUILD_UNIX_SOCKET PcapCommand *pcapcmd = SCMalloc(sizeof(PcapCommand)); + if (UnixManagerInit() != 0) + return 1; + if (unlikely(pcapcmd == NULL)) { SCLogError(SC_ERR_MEM_ALLOC, "Can not allocate pcap command"); return 1; @@ -1023,20 +1027,19 @@ int RunModeUnixSocketSingle(void) pcapcmd->running = 0; pcapcmd->currentfile = NULL; - UnixManagerThreadSpawn(1); - - unix_socket_mode_is_running = 1; - UnixManagerRegisterCommand("pcap-file", UnixSocketAddPcapFile, pcapcmd, UNIX_CMD_TAKE_ARGS); UnixManagerRegisterCommand("pcap-file-number", UnixSocketPcapFilesNumber, pcapcmd, 0); UnixManagerRegisterCommand("pcap-file-list", UnixSocketPcapFilesList, pcapcmd, 0); UnixManagerRegisterCommand("pcap-current", UnixSocketPcapCurrent, pcapcmd, 0); UnixManagerRegisterBackgroundTask(UnixSocketPcapFilesCheck, pcapcmd); -#endif + + UnixManagerThreadSpawn(1); + unix_socket_mode_is_running = 1; return 0; } +#endif int RunModeUnixSocketIsActive(void) { diff --git a/src/runmode-unix-socket.h b/src/runmode-unix-socket.h index 78ef536265..91de1c254f 100644 --- a/src/runmode-unix-socket.h +++ b/src/runmode-unix-socket.h @@ -23,7 +23,6 @@ #ifndef __RUNMODE_UNIX_SOCKET_H__ #define __RUNMODE_UNIX_SOCKET_H__ -int RunModeUnixSocketSingle(void); void RunModeUnixSocketRegister(void); const char *RunModeUnixSocketGetDefaultMode(void); diff --git a/src/unix-manager.c b/src/unix-manager.c index 2f942d895c..7bc5ae4d04 100644 --- a/src/unix-manager.c +++ b/src/unix-manager.c @@ -846,22 +846,13 @@ TmEcode UnixManagerRegisterBackgroundTask(TmEcode (*Func)(void *), SCReturnInt(TM_ECODE_OK); } -typedef struct UnixManagerThreadData_ { - int padding; -} UnixManagerThreadData; - -static TmEcode UnixManagerThreadInit(ThreadVars *t, const void *initdata, void **data) +int UnixManagerInit(void) { - UnixManagerThreadData *utd = SCCalloc(1, sizeof(*utd)); - if (utd == NULL) - return TM_ECODE_FAILED; - if (UnixNew(&command) == 0) { int failure_fatal = 0; if (ConfGetBool("engine.init-failure-fatal", &failure_fatal) != 1) { SCLogDebug("ConfGetBool could not load the value."); } - SCFree(utd); if (failure_fatal) { SCLogError(SC_ERR_INITIALIZATION, "Unable to create unix command socket"); @@ -869,7 +860,7 @@ static TmEcode UnixManagerThreadInit(ThreadVars *t, const void *initdata, void * } else { SCLogWarning(SC_ERR_INITIALIZATION, "Unable to create unix command socket"); - return TM_ECODE_FAILED; + return -1; } } @@ -893,6 +884,19 @@ static TmEcode UnixManagerThreadInit(ThreadVars *t, const void *initdata, void * UnixManagerRegisterCommand("remove-hostbit", UnixSocketHostbitRemove, &command, UNIX_CMD_TAKE_ARGS); UnixManagerRegisterCommand("list-hostbit", UnixSocketHostbitList, &command, UNIX_CMD_TAKE_ARGS); + return 0; +} + +typedef struct UnixManagerThreadData_ { + int padding; +} UnixManagerThreadData; + +static TmEcode UnixManagerThreadInit(ThreadVars *t, const void *initdata, void **data) +{ + UnixManagerThreadData *utd = SCCalloc(1, sizeof(*utd)); + if (utd == NULL) + return TM_ECODE_FAILED; + *data = utd; return TM_ECODE_OK; } diff --git a/src/unix-manager.h b/src/unix-manager.h index 5ec3c889e3..5270d91ed1 100644 --- a/src/unix-manager.h +++ b/src/unix-manager.h @@ -33,6 +33,7 @@ SCCtrlCondT unix_manager_ctrl_cond; SCCtrlMutex unix_manager_ctrl_mutex; +int UnixManagerInit(void); void UnixManagerThreadSpawn(int mode); void UnixSocketKillSocketThread(void);