From: Ron Dempster (rdempste) Date: Thu, 21 Jan 2021 17:06:59 +0000 (+0000) Subject: Merge pull request #2712 in SNORT/snort3 from ~RDEMPSTE/snort3:inspector_ref_count... X-Git-Tag: 3.1.1.0~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=562a2a965d36f0b4bbb5bec4a3f8142e8cedaa43;p=thirdparty%2Fsnort3.git Merge pull request #2712 in SNORT/snort3 from ~RDEMPSTE/snort3:inspector_ref_count to master Squashed commit of the following: commit 8787270d1f835699059f2b6163435b222d076088 Author: Ron Dempster (rdempste) Date: Fri Jan 15 14:40:08 2021 -0500 inspector: add a global reference count for uses that are not thread specific --- diff --git a/src/framework/inspector.cc b/src/framework/inspector.cc index 178814fcc..eb6f34384 100644 --- a/src/framework/inspector.cc +++ b/src/framework/inspector.cc @@ -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", diff --git a/src/framework/inspector.h b/src/framework/inspector.h index 641778531..6f2562f3b 100644 --- a/src/framework/inspector.h +++ b/src/framework/inspector.h @@ -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) diff --git a/src/managers/inspector_manager.cc b/src/managers/inspector_manager.cc index b33423a3a..3f3c2c3df 100644 --- a/src/managers/inspector_manager.cc +++ b/src/managers/inspector_manager.cc @@ -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 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)