]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Pull request #3748: main: Avoid race conditions when accessing id to tid map
authorShanmugam S (shanms) <shanms@cisco.com>
Tue, 31 Jan 2023 16:34:00 +0000 (16:34 +0000)
committerShanmugam S (shanms) <shanms@cisco.com>
Tue, 31 Jan 2023 16:34:00 +0000 (16:34 +0000)
Merge in SNORT/snort3 from ~AMUTTUVA/snort3:fix_race_tid to master

Squashed commit of the following:

commit 0cf251b8ff63df57a9bae11d31ef16b7c3bad3e0
Author: Akhilesh MY <amuttuva@cisco.com>
Date:   Tue Jan 24 04:08:15 2023 -0500

    main: Avoid race conditions when accessing id to tid map

src/main/analyzer.cc
src/main/test/distill_verdict_stubs.h
src/main/thread_config.cc
src/main/thread_config.h

index 9ee93eb14a5e3dd30742cbcee9f6cd0b604724bf..9de9399e36edc1749758bbd18d7906e0cc8ff9b0 100644 (file)
@@ -67,7 +67,6 @@
 #include "time/packet_time.h"
 #include "trace/trace_api.h"
 #include "utils/stats.h"
-#include "utils/util.h"
 
 #include "analyzer_command.h"
 #include "oops_handler.h"
@@ -743,7 +742,7 @@ void Analyzer::operator()(Swapper* ps, uint16_t run_num)
 
     // init here to pin separately from packet threads
     DetectionEngine::thread_init();
-    SnortConfig::get_conf()->thread_config->set_instance_tid(id, (int)gettid());
+    SnortConfig::get_conf()->thread_config->set_instance_tid(id);
     // Perform all packet thread initialization actions that need to be taken with escalated
     // privileges prior to starting the DAQ module.
     SnortConfig::get_conf()->thread_config->implement_thread_affinity(
index 48d825a1f592ed4adc5f64030b58a1890a777028..10d84f94301314d1dcc974621898741bc15edac2 100644 (file)
@@ -224,7 +224,7 @@ InspectionPolicy* get_inspection_policy() { return nullptr; }
 Flow::Flow() = default;
 Flow::~Flow() = default;
 void ThreadConfig::implement_thread_affinity(SThreadType, unsigned) { }
-void ThreadConfig::set_instance_tid(const int, const int) { }
+void ThreadConfig::set_instance_tid(int) { }
 }
 
 void memory::MemoryCap::thread_init() { }
index 0051ae972dcb64fcb2e7fbf65fde0ce6e7c08f0d..f930d3dd9419be443618b0946f88d155b3129bf3 100644 (file)
@@ -43,6 +43,8 @@ static hwloc_topology_t topology = nullptr;
 static hwloc_cpuset_t process_cpuset = nullptr;
 static const struct hwloc_topology_support* topology_support = nullptr;
 static unsigned instance_max = 1;
+static std::mutex instance_mutex;
+static std::map<int, int> instance_id_to_tid;
 
 struct CpuSet
 {
@@ -162,13 +164,15 @@ void ThreadConfig::set_named_thread_affinity(const string& name, CpuSet* cpuset)
         ParseWarning(WARN_CONF, "This platform does not support setting thread affinity.\n");
 }
 
-void ThreadConfig::set_instance_tid(int id, int tid)
+void ThreadConfig::set_instance_tid(int id)
 {
-    instance_id_to_tid.emplace(id,tid);
+    std::lock_guard<std::mutex> lock(instance_mutex);
+    instance_id_to_tid.emplace(id, (int)gettid());
 }
 
-int ThreadConfig::get_instance_tid(int id) const
+int ThreadConfig::get_instance_tid(int id)
 {
+    std::lock_guard<std::mutex> lock(instance_mutex);
     int ret = -1;
     auto iter = instance_id_to_tid.find(id);
     if ( iter != instance_id_to_tid.end() )
index 602f6a03868287486b279787ce6d6cc887032fce..acabe85d315eff59df5d2a5bf2f83d294a22e0fd 100644 (file)
@@ -39,14 +39,14 @@ public:
     static unsigned get_instance_max();
     static void term();
     static void start_watchdog();
+    static void set_instance_tid(int);
+    static int get_instance_tid(int);
 
     ~ThreadConfig();
     void set_thread_affinity(SThreadType, unsigned id, CpuSet*);
     void set_named_thread_affinity(const std::string&, CpuSet*);
     void implement_thread_affinity(SThreadType, unsigned id);
     void implement_named_thread_affinity(const std::string& name);
-    void set_instance_tid(int, int);
-    int get_instance_tid(int) const;
 
     static constexpr unsigned int DEFAULT_THREAD_ID = 0;
 
@@ -69,7 +69,6 @@ private:
     };
     std::map<TypeIdPair, CpuSet*, TypeIdPairComparer> thread_affinity;
     std::map<std::string, CpuSet*> named_thread_affinity;
-    std::map<int, int> instance_id_to_tid;
 };
 }