]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Pull request #3797: Revert "Pull request #3790: thread_config: remove message use...
authorSteven Baigal (sbaigal) <sbaigal@cisco.com>
Tue, 4 Apr 2023 19:18:02 +0000 (19:18 +0000)
committerSteven Baigal (sbaigal) <sbaigal@cisco.com>
Tue, 4 Apr 2023 19:18:02 +0000 (19:18 +0000)
Merge in SNORT/snort3 from ~SBAIGAL/snort3:revert_wgt1 to master

Squashed commit of the following:

commit 89cecd40161799c1c0afbaf83698cd77af32c172
Author: Steven Baigal <sbaigal@cisco.com>
Date:   Tue Apr 4 14:55:20 2023 -0400

    Revert "Pull request #3790: thread_config: remove message use in wdt"

    This reverts commit 824a06ebdc56f88ec8dfe9c96f31a712e053e00e.

src/flow/flow_cache.cc
src/flow/test/flow_cache_test.cc
src/main/thread_config.cc
src/main/thread_config.h

index 22460ebb78627ce76e9aa892faef5db3a5ccf2d9..39fbce6417a781325dfc857da84b94d5fce2938c 100644 (file)
@@ -28,7 +28,6 @@
 #include "hash/hash_defs.h"
 #include "hash/zhash.h"
 #include "helpers/flag_context.h"
-#include "main/thread_config.h"
 #include "packet_io/active.h"
 #include "packet_tracer/packet_tracer.h"
 #include "stream/base/stream_module.h"
@@ -49,7 +48,6 @@ using namespace snort;
 static const unsigned ALLOWED_FLOWS_ONLY = 1;
 static const unsigned OFFLOADED_FLOWS_TOO = 2;
 static const unsigned ALL_FLOWS = 3;
-static const unsigned WDT_MASK = 7; // kick watchdog once for every 8 flows deleted
 
 //-------------------------------------------------------------------------
 // FlowCache stuff
@@ -456,9 +454,7 @@ unsigned FlowCache::delete_active_flows(unsigned mode, unsigned num_to_delete, u
             continue;
         }
 
-        if ( (deleted & WDT_MASK) == 0 )
-            ThreadConfig::preemptive_kick();
-
+        // we have a winner...
         unlink_uni(flow);
 
         if ( flow->was_blocked() )
@@ -492,9 +488,6 @@ unsigned FlowCache::delete_flows(unsigned num_to_delete)
         // delete from the free list first...
         while ( num_to_delete )
         {
-            if ( (deleted & WDT_MASK) == 0 )
-                ThreadConfig::preemptive_kick();
-
             Flow* flow = (Flow*)hash_table->pop();
             if ( !flow )
                 break;
index 6fc0d0e2a7b0559334d3320192b990f7c8544cb0..1ceca8f4312e5df5089e527bc28a89424f370d0c 100644 (file)
@@ -33,7 +33,6 @@
 #include "flow/session.h"
 #include "main/policy.h"
 #include "main/snort_config.h"
-#include "main/thread_config.h"
 #include "managers/inspector_manager.h"
 #include "packet_io/active.h"
 #include "packet_tracer/packet_tracer.h"
@@ -106,7 +105,6 @@ SfIpRet SfIp::set(void const*, int) { return SFIP_SUCCESS; }
 void snort::trace_vprintf(const char*, TraceLevel, const char*, const Packet*, const char*, va_list) {}
 uint8_t snort::TraceApi::get_constraints_generation() { return 0; }
 void snort::TraceApi::filter(const Packet&) {}
-void ThreadConfig::preemptive_kick() {}
 
 namespace snort
 {
index 1119c8a998a1f188f82d1bfa696a5278a5f42558..98286047b2a993f3d1cec550b73f61f8d3b91c54 100644 (file)
@@ -275,7 +275,7 @@ struct Watchdog
 class WatchdogKick : public AnalyzerCommand
 {
 public:
-    WatchdogKick(Watchdog* d) : dog(d) { }
+    WatchdogKick(Watchdog* d) : dog(d) { dog->waiting = true; }
     bool execute(Analyzer&, void**) override
     {
         dog->resp[get_instance_id()] = true;
@@ -283,7 +283,7 @@ public:
     }
     const char* stringify() override { return "WATCHDOG_KICK"; }
 
-    ~WatchdogKick() override { }
+    ~WatchdogKick() override { dog->waiting = false; }
 private:
     Watchdog* dog;
 };
@@ -294,16 +294,13 @@ void Watchdog::kick()
     if ( waiting )
     {
         uint16_t thread_count = 0;
+        WarningMessage("Packet processing threads are unresponsive\n");
+        WarningMessage("Unresponsive thread ID: ");
         for ( unsigned i = 0; i < max; ++i )
         {
             if ( !resp[i] )
             {
                 ++thread_count;
-                if (thread_count == 1)
-                {
-                    WarningMessage("Packet processing threads are unresponsive\n");
-                    WarningMessage("Unresponsive thread ID: ");
-                }
                 const int tid = SnortConfig::get_conf()->thread_config->get_instance_tid(i);
                 if ( tid != -1 )
                     WarningMessage("%d (TID: %d)", i, tid);
@@ -311,10 +308,7 @@ void Watchdog::kick()
                     WarningMessage("%d ", i);
             }
         }
-
-        if ( thread_count )
-            WarningMessage("\n");
-
+        WarningMessage("\n");
         if ( thread_count >= SnortConfig::get_conf()->watchdog_min_thread_count )
         {
             WarningMessage("Aborting Snort\n");
@@ -326,26 +320,19 @@ void Watchdog::kick()
         resp[i] = false;
 
     main_broadcast_command(new WatchdogKick(this), nullptr);
-    waiting = true;
-}
-
-static Watchdog& get_watchdog()
-{
-    static Watchdog s_dog(SnortConfig::get_conf()->watchdog_timer);
-    return s_dog;
 }
 
 static void s_watchdog_handler(void*)
 {
-    Watchdog& dog = get_watchdog();
+    static Watchdog s_dog(SnortConfig::get_conf()->watchdog_timer);
     if ( SnortConfig::get_conf()->watchdog_timer > 0 )
     {
-        if ( dog.seconds_count > 0 )
-            dog.seconds_count--;
+        if ( s_dog.seconds_count > 0 )
+            s_dog.seconds_count--;
         else
         {
-            dog.kick();
-            dog.seconds_count = SnortConfig::get_conf()->watchdog_timer;
+            s_dog.kick();
+            s_dog.seconds_count = SnortConfig::get_conf()->watchdog_timer;
         }
     }
 }
@@ -355,15 +342,6 @@ void ThreadConfig::start_watchdog()
     Periodic::register_handler(s_watchdog_handler, nullptr, 0, 1000);
 }
 
-void ThreadConfig::preemptive_kick()
-{
-    if (SnortConfig::get_conf()->watchdog_timer)
-    {
-        Watchdog& dog = get_watchdog();
-        dog.resp[get_instance_id()] = true;
-    }
-}
-
 
 // -----------------------------------------------------------------------------
 // unit tests
index ba409694179ede8dcd7842dea24e2522ac7fd42c..c59c7d792aafe7242075c9c4477f063c008e4cac 100644 (file)
@@ -39,7 +39,6 @@ public:
     static unsigned get_instance_max();
     static void term();
     static void start_watchdog();
-    static void preemptive_kick();
     static void set_instance_tid(int);
     static int get_instance_tid(int);