]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #2712 in SNORT/snort3 from ~RDEMPSTE/snort3:inspector_ref_count...
authorRon Dempster (rdempste) <rdempste@cisco.com>
Thu, 21 Jan 2021 17:06:59 +0000 (17:06 +0000)
committerRon Dempster (rdempste) <rdempste@cisco.com>
Thu, 21 Jan 2021 17:06:59 +0000 (17:06 +0000)
Squashed commit of the following:

commit 8787270d1f835699059f2b6163435b222d076088
Author: Ron Dempster (rdempste) <rdempste@cisco.com>
Date:   Fri Jan 15 14:40:08 2021 -0500

    inspector: add a global reference count for uses that are not thread specific

src/framework/inspector.cc
src/framework/inspector.h
src/managers/inspector_manager.cc

index 178814fcc2999455aeff9c6d78ad49551a12903c..eb6f3438424a8f7b4f06fd77a4dbd4046b3a30aa 100644 (file)
@@ -116,6 +116,12 @@ void Inspector::add_ref()
 void Inspector::rem_ref()
 { --ref_count[slot]; }
 
+void Inspector::add_global_ref()
+{ ++ref_count[0]; }
+
+void Inspector::rem_global_ref()
+{ --ref_count[0]; }
+
 static const char* InspectorTypeNames[IT_MAX] =
 {
     "passive",
index 6417785319eb98122bfb35284140da6c11b8c0da..6f2562f3bffe992e19baa2e20c7a734fb512c322 100644 (file)
@@ -110,6 +110,10 @@ public:
     void add_ref();
     void rem_ref();
 
+    // Reference counts for the inspector that are not thread specific
+    void add_global_ref();
+    void rem_global_ref();
+
     bool is_inactive();
 
     void set_service(SnortProtocolId snort_protocol_id_param)
index b33423a3a24981b5fb09bd72d37981d4c5193577..3f3c2c3df453dea47483eea4dfccca9d41b2cab2 100644 (file)
@@ -147,7 +147,7 @@ PHInstance::PHInstance(PHClass& p, SnortConfig* sc, Module* mod) : pp_class(p)
     if ( handler )
     {
         handler->set_api(&p.api);
-        handler->add_ref();
+        handler->add_global_ref();
 
         if ( p.api.service )
             handler->set_service(sc->proto_ref->add(p.api.service));
@@ -157,7 +157,7 @@ PHInstance::PHInstance(PHClass& p, SnortConfig* sc, Module* mod) : pp_class(p)
 PHInstance::~PHInstance()
 {
     if ( handler )
-        handler->rem_ref();
+        handler->rem_global_ref();
 }
 
 typedef vector<PHGlobal*> PHGlobalList;
@@ -534,7 +534,7 @@ void InspectorManager::clear_removed_inspectors(SnortConfig* sc)
 {
     FrameworkPolicy* fp = sc->policy_map->get_inspection_policy()->framework_policy;
     for ( auto* p : fp->removed_ilist )
-        p->handler->rem_ref();
+        p->handler->rem_global_ref();
     fp->removed_ilist.clear();
 }
 
@@ -549,7 +549,7 @@ void InspectorManager::tear_down_removed_inspectors(const SnortConfig* old, Snor
         if (!instance)
         {
             fp->removed_ilist.emplace_back(*it);
-            (*it)->handler->add_ref();
+            (*it)->handler->add_global_ref();
             (*it)->handler->tear_down(sc);
         }
     }
@@ -967,7 +967,7 @@ Inspector* InspectorManager::acquire(const char* key, bool dflt_only)
     if ( !pi )
         FatalError("unconfigured inspector: '%s'.\n", key);
     else
-        pi->add_ref();
+        pi->add_global_ref();
 
     return pi;
 }
@@ -975,7 +975,7 @@ Inspector* InspectorManager::acquire(const char* key, bool dflt_only)
 void InspectorManager::release(Inspector* pi)
 {
     assert(pi);
-    pi->rem_ref();
+    pi->rem_global_ref();
 }
 
 bool InspectorManager::configure(SnortConfig* sc, bool cloned)