]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Pull request #4737: main: change process_id to a global var such that we don't requir...
authorMichael Matirko (mmatirko) <mmatirko@cisco.com>
Tue, 13 May 2025 20:12:43 +0000 (20:12 +0000)
committerSteven Baigal (sbaigal) <sbaigal@cisco.com>
Tue, 13 May 2025 20:12:43 +0000 (20:12 +0000)
Merge in SNORT/snort3 from ~MMATIRKO/snort3:proc_id_2 to master

Squashed commit of the following:

commit 90a78ea8f5c0ac0247e0e48fe1e288568b9e053f
Author: Michael Matirko <mmatirko@cisco.com>
Date:   Fri May 2 14:57:04 2025 -0400

    main: change process_id to a global var such that we don't require constant access to the SnortConfig

src/main/snort.cc
src/main/snort.h

index 8d18aa83ddd65408101d5b2f1d129f111a48c9d4..ad15f0c005d4805db1891c7ad12b3e01d142e8e1 100644 (file)
@@ -139,6 +139,8 @@ void Snort::init(int argc, char** argv)
     snort_cmd_line_conf = parse_cmd_line(argc, argv);
     SnortConfig::set_conf(snort_cmd_line_conf);
 
+    init_process_id();
+
     LogMessage("--------------------------------------------------\n");
 #ifdef BUILD
     LogMessage("%s  Snort++ %s-%s\n", get_prompt(), VERSION, BUILD);
@@ -410,15 +412,18 @@ bool Snort::is_reloading()
 bool Snort::has_dropped_privileges()
 { return privileges_dropped; }
 
-unsigned Snort::get_process_id()
+void Snort::init_process_id()
 {
     const SnortConfig* sc = SnortConfig::get_conf();
     if (!sc->id_offset)
-        return 1;
+        process_id = 1;
     else
-        return std::ceil(sc->id_offset / (float) ThreadConfig::get_instance_max());
+        process_id = std::ceil(sc->id_offset / (float) ThreadConfig::get_instance_max());
 }
 
+unsigned Snort::get_process_id()
+{ return process_id; }
+
 void Snort::setup(int argc, char* argv[])
 {
     set_main_thread();
@@ -658,28 +663,33 @@ TEST_CASE("Check process ID handling", "[snort_process_id]")
     // Mock first process
     snort::SnortConfig* sc = const_cast<snort::SnortConfig*>(snort::SnortConfig::get_conf());
     snort::ThreadConfig::set_instance_max(4);
+    Snort::init_process_id();
     sc->id_offset = 0;
     unsigned pid1 = Snort::get_process_id();
     CHECK(pid1 == 1);
 
     // Mock second process
     sc->id_offset = 5;
+    Snort::init_process_id();
     unsigned pid2 = Snort::get_process_id();
     CHECK(pid2 == 2);
 
     // Mock third process
     sc->id_offset = 9;
+    Snort::init_process_id();
     unsigned pid3 = Snort::get_process_id();
     CHECK(pid3 == 3);
 
     // Mock fourth process
     sc->id_offset = 13;
+    Snort::init_process_id();
     unsigned pid4 = Snort::get_process_id();
     CHECK(pid4 == 4);
 
     // Restore prior configs
     snort::ThreadConfig::set_instance_max(1);
     sc->id_offset = 0;
+    Snort::init_process_id();
 }
 
 #endif
index 7547e10a3dd13919f808d00b3e7c27672d6f857d..b206aeb929263890e5e21edb684be622c15ddb22 100644 (file)
@@ -51,6 +51,7 @@ public:
     static bool is_exiting() { return already_exiting; }
     static bool is_reloading();
 
+    static void init_process_id();
     SO_PUBLIC static unsigned get_process_id();
 
 private:
@@ -64,6 +65,7 @@ private:
     static bool reloading;
     static bool privileges_dropped;
     static bool already_exiting;
+    inline static unsigned process_id = 0;
 };
 }