diff --git a/src/runmode-af-packet.c b/src/runmode-af-packet.c index fd21c26293f3..b8ad0bfac0c3 100644 --- a/src/runmode-af-packet.c +++ b/src/runmode-af-packet.c @@ -765,8 +765,6 @@ int RunModeIdsAFPAutoFp(void) int ret; const char *live_dev = NULL; - RunModeInitialize(); - TimeModeSetLive(); (void)ConfGet("af-packet.live-interface", &live_dev); @@ -804,7 +802,6 @@ int RunModeIdsAFPSingle(void) int ret; const char *live_dev = NULL; - RunModeInitialize(); TimeModeSetLive(); (void)ConfGet("af-packet.live-interface", &live_dev); @@ -846,7 +843,6 @@ int RunModeIdsAFPWorkers(void) int ret; const char *live_dev = NULL; - RunModeInitialize(); TimeModeSetLive(); (void)ConfGet("af-packet.live-interface", &live_dev); diff --git a/src/runmode-af-xdp.c b/src/runmode-af-xdp.c index 61d038f97c0c..33a47d167aee 100644 --- a/src/runmode-af-xdp.c +++ b/src/runmode-af-xdp.c @@ -330,7 +330,6 @@ int RunModeIdsAFXDPSingle(void) int ret; const char *live_dev = NULL; - RunModeInitialize(); TimeModeSetLive(); (void)ConfGet("af-xdp.live-interface", &live_dev); @@ -365,7 +364,6 @@ int RunModeIdsAFXDPWorkers(void) int ret; const char *live_dev = NULL; - RunModeInitialize(); TimeModeSetLive(); (void)ConfGet("af-xdp.live-interface", &live_dev); diff --git a/src/runmode-dpdk.c b/src/runmode-dpdk.c index 5a934e8b9ed5..feba401b4130 100644 --- a/src/runmode-dpdk.c +++ b/src/runmode-dpdk.c @@ -1649,7 +1649,6 @@ int RunModeIdsDpdkWorkers(void) #ifdef HAVE_DPDK int ret; - RunModeInitialize(); TimeModeSetLive(); InitEal(); diff --git a/src/runmode-erf-dag.c b/src/runmode-erf-dag.c index f2fafbb3c3e2..503d1a15562a 100644 --- a/src/runmode-erf-dag.c +++ b/src/runmode-erf-dag.c @@ -72,8 +72,6 @@ int RunModeIdsErfDagSingle(void) SCEnter(); - RunModeInitialize(); - TimeModeSetLive(); ret = RunModeSetLiveCaptureSingle(ParseDagConfig, @@ -97,8 +95,6 @@ int RunModeIdsErfDagAutoFp(void) SCEnter(); - RunModeInitialize(); - TimeModeSetLive(); ret = RunModeSetLiveCaptureAutoFp(ParseDagConfig, DagConfigGetThreadCount, "ReceiveErfDag", @@ -118,8 +114,6 @@ int RunModeIdsErfDagWorkers(void) SCEnter(); - RunModeInitialize(); - TimeModeSetLive(); ret = RunModeSetLiveCaptureWorkers(ParseDagConfig, DagConfigGetThreadCount, "ReceiveErfDag", diff --git a/src/runmode-erf-file.c b/src/runmode-erf-file.c index ac7386871a3b..dc09509d0411 100644 --- a/src/runmode-erf-file.c +++ b/src/runmode-erf-file.c @@ -59,8 +59,6 @@ int RunModeErfFileSingle(void) FatalError("Failed to get erf-file.file from config."); } - RunModeInitialize(); - TimeModeSetOffline(); /* Basically the same setup as PCAP files. */ @@ -113,8 +111,6 @@ int RunModeErfFileAutoFp(void) char *queues = NULL; uint16_t thread; - RunModeInitialize(); - const char *file = NULL; if (ConfGet("erf-file.file", &file) == 0) { FatalError("Failed retrieving erf-file.file from config"); diff --git a/src/runmode-ipfw.c b/src/runmode-ipfw.c index 1aae3e13b4df..de72f0623d06 100644 --- a/src/runmode-ipfw.c +++ b/src/runmode-ipfw.c @@ -63,8 +63,6 @@ int RunModeIpsIPFWAutoFp(void) int ret = 0; #ifdef IPFW - RunModeInitialize(); - TimeModeSetLive(); LiveDeviceHasNoStats(); @@ -83,8 +81,6 @@ int RunModeIpsIPFWWorker(void) int ret = 0; #ifdef IPFW - RunModeInitialize(); - TimeModeSetLive(); LiveDeviceHasNoStats(); diff --git a/src/runmode-napatech.c b/src/runmode-napatech.c index 912126b9feab..cb8f560ea350 100644 --- a/src/runmode-napatech.c +++ b/src/runmode-napatech.c @@ -216,7 +216,6 @@ static int NapatechInit(int runmode) { int status; - RunModeInitialize(); TimeModeSetLive(); /* Initialize the API and check version compatibility */ diff --git a/src/runmode-netmap.c b/src/runmode-netmap.c index 5110a820eef9..927dc718856c 100644 --- a/src/runmode-netmap.c +++ b/src/runmode-netmap.c @@ -399,7 +399,6 @@ static int NetmapRunModeInit(NetmapRunMode_t runmode) { SCEnter(); - RunModeInitialize(); TimeModeSetLive(); const char *live_dev = NULL; diff --git a/src/runmode-nflog.c b/src/runmode-nflog.c index f744eae5909c..28b9ae5efd64 100644 --- a/src/runmode-nflog.c +++ b/src/runmode-nflog.c @@ -153,7 +153,6 @@ static int RunModeIdsNflogAutoFp(void) SCEnter(); #ifdef HAVE_NFLOG - RunModeInitialize(); TimeModeSetLive(); int ret = RunModeSetLiveCaptureAutoFp(ParseNflogConfig, NflogConfigGeThreadsCount, @@ -173,7 +172,6 @@ static int RunModeIdsNflogSingle(void) SCEnter(); #ifdef HAVE_NFLOG - RunModeInitialize(); TimeModeSetLive(); int ret = RunModeSetLiveCaptureSingle(ParseNflogConfig, NflogConfigGeThreadsCount, @@ -193,7 +191,6 @@ static int RunModeIdsNflogWorkers(void) SCEnter(); #ifdef HAVE_NFLOG - RunModeInitialize(); TimeModeSetLive(); int ret = RunModeSetLiveCaptureWorkers(ParseNflogConfig, NflogConfigGeThreadsCount, diff --git a/src/runmode-nfq.c b/src/runmode-nfq.c index f20e05a3cc18..d9ea93c746f3 100644 --- a/src/runmode-nfq.c +++ b/src/runmode-nfq.c @@ -60,8 +60,6 @@ int RunModeIpsNFQAutoFp(void) int ret = 0; #ifdef NFQ - RunModeInitialize(); - TimeModeSetLive(); LiveDeviceHasNoStats(); @@ -80,8 +78,6 @@ int RunModeIpsNFQWorker(void) int ret = 0; #ifdef NFQ - RunModeInitialize(); - TimeModeSetLive(); LiveDeviceHasNoStats(); diff --git a/src/runmode-pcap-file.c b/src/runmode-pcap-file.c index 660c5304114e..e03592514fee 100644 --- a/src/runmode-pcap-file.c +++ b/src/runmode-pcap-file.c @@ -64,7 +64,6 @@ int RunModeFilePcapSingle(void) FatalError("Failed retrieving pcap-file from Conf"); } - RunModeInitialize(); TimeModeSetOffline(); PcapFileGlobalInit(); @@ -130,8 +129,6 @@ int RunModeFilePcapAutoFp(void) char *queues = NULL; uint16_t thread; - RunModeInitialize(); - const char *file = NULL; if (ConfGet("pcap-file.file", &file) == 0) { FatalError("Failed retrieving pcap-file from Conf"); diff --git a/src/runmode-pcap.c b/src/runmode-pcap.c index d9f0967ccb9f..bfefe3ec0e41 100644 --- a/src/runmode-pcap.c +++ b/src/runmode-pcap.c @@ -235,7 +235,6 @@ int RunModeIdsPcapSingle(void) SCEnter(); - RunModeInitialize(); TimeModeSetLive(); (void)ConfGet("pcap.single-pcap-dev", &live_dev); @@ -275,7 +274,6 @@ int RunModeIdsPcapAutoFp(void) const char *live_dev = NULL; SCEnter(); - RunModeInitialize(); TimeModeSetLive(); (void) ConfGet("pcap.single-pcap-dev", &live_dev); @@ -303,7 +301,6 @@ int RunModeIdsPcapWorkers(void) const char *live_dev = NULL; SCEnter(); - RunModeInitialize(); TimeModeSetLive(); (void) ConfGet("pcap.single-pcap-dev", &live_dev); diff --git a/src/runmode-pfring.c b/src/runmode-pfring.c index 7580fdd6cc14..b0af83b4bfc2 100644 --- a/src/runmode-pfring.c +++ b/src/runmode-pfring.c @@ -450,8 +450,6 @@ int RunModeIdsPfringAutoFp(void) const char *live_dev = NULL; ConfigIfaceParserFunc tparser; - RunModeInitialize(); - TimeModeSetLive(); ret = GetDevAndParser(&live_dev, &tparser); @@ -481,8 +479,6 @@ int RunModeIdsPfringSingle(void) const char *live_dev = NULL; ConfigIfaceParserFunc tparser; - RunModeInitialize(); - TimeModeSetLive(); ret = GetDevAndParser(&live_dev, &tparser); @@ -515,8 +511,6 @@ int RunModeIdsPfringWorkers(void) const char *live_dev = NULL; ConfigIfaceParserFunc tparser; - RunModeInitialize(); - TimeModeSetLive(); ret = GetDevAndParser(&live_dev, &tparser); diff --git a/src/runmode-windivert.c b/src/runmode-windivert.c index 7c2ccfe46a8e..a4514270e964 100644 --- a/src/runmode-windivert.c +++ b/src/runmode-windivert.c @@ -54,8 +54,6 @@ int RunModeIpsWinDivertAutoFp(void) SCEnter(); int ret = 0; #ifdef WINDIVERT - RunModeInitialize(); - TimeModeSetLive(); LiveDeviceHasNoStats(); diff --git a/src/runmodes.c b/src/runmodes.c index 5362f4caf684..348adfa25d43 100644 --- a/src/runmodes.c +++ b/src/runmodes.c @@ -980,7 +980,7 @@ float threading_detect_ratio = 1; /** * Initialize multithreading settings. */ -void RunModeInitialize(void) +void RunModeInitializeThreadSettings(void) { threading_set_cpu_affinity = FALSE; if ((ConfGetBool("threading.set-cpu-affinity", &threading_set_cpu_affinity)) == 0) { @@ -1009,6 +1009,15 @@ void RunModeInitialize(void) FatalError("Failed to initialize thread_stack_size output, invalid limit: %s", ss); } } + } else { + pthread_attr_t attr; + pthread_attr_init(&attr); + size_t size; + if (pthread_attr_getstacksize(&attr, &size) == 0 && size < 512 * 1024) { + threading_set_stack_size = 512 * 1024; + SCLogNotice("thread stack size of %" PRIuMAX " to too small: setting to 512k", + (uintmax_t)size); + } } SCLogDebug("threading.stack-size %" PRIu64, threading_set_stack_size); diff --git a/src/runmodes.h b/src/runmodes.h index afa3f8d8f0bf..57b31b6d4054 100644 --- a/src/runmodes.h +++ b/src/runmodes.h @@ -85,7 +85,7 @@ void RunModeDispatch(int, const char *, const char *capture_plugin_name, const c void RunModeRegisterRunModes(void); void RunModeRegisterNewRunMode(enum RunModes, const char *, const char *, int (*RunModeFunc)(void), void (*RunModeIsIPSEnabled)(void)); -void RunModeInitialize(void); +void RunModeInitializeThreadSettings(void); void RunModeInitializeOutputs(void); void RunModeShutDown(void); diff --git a/src/suricata.c b/src/suricata.c index 1fdc041e9a71..7fe469acf24d 100644 --- a/src/suricata.c +++ b/src/suricata.c @@ -2941,6 +2941,7 @@ int SuricataMain(int argc, char **argv) LogVersion(&suricata); UtilCpuPrintSummary(); + RunModeInitializeThreadSettings(); if (suricata.run_mode == RUNMODE_CONF_TEST) SCLogInfo("Running suricata under test mode"); diff --git a/src/tests/fuzz/fuzz_decodepcapfile.c b/src/tests/fuzz/fuzz_decodepcapfile.c index dbe042206f27..cf508697f05b 100644 --- a/src/tests/fuzz/fuzz_decodepcapfile.c +++ b/src/tests/fuzz/fuzz_decodepcapfile.c @@ -54,7 +54,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) PostConfLoadedSetup(&surifuzz); - RunModeInitialize(); + RunModeInitializeThreadSettings(); TimeModeSetOffline(); PcapFileGlobalInit();