]> git.stg.codes - stg.git/blobdiff - projects/stargazer/traffcounter_impl.cpp
Do not use pthread_kill to stop a thread
[stg.git] / projects / stargazer / traffcounter_impl.cpp
index 237799f5e22a56fc083419ff2aadb9726dd0508c..da64a0b8bb2ceb68ee7c26e63f5eb52989eeee28 100644 (file)
@@ -59,12 +59,21 @@ tcp = 0, udp, icmp, tcp_udp, all
 //-----------------------------------------------------------------------------
 TRAFFCOUNTER_IMPL::TRAFFCOUNTER_IMPL(USERS_IMPL * u, const std::string & fn)
     : TRAFFCOUNTER(),
+      rules(),
+      packets(),
+      ip2packets(),
+      dirName(),
       WriteServLog(GetStgLogger()),
       rulesFileName(fn),
+      monitorDir(),
       monitoring(false),
       users(u),
       running(false),
       stopped(true),
+      mutex(),
+      thread(),
+      ipBeforeNotifiers(),
+      ipAfterNotifiers(),
       addUserNotifier(*this),
       delUserNotifier(*this)
 {
@@ -100,13 +109,8 @@ if (ReadRules())
 
 printfd(__FILE__, "TRAFFCOUNTER::Start()\n");
 int h = users->OpenSearch();
+assert(h && "USERS::OpenSearch is always correct");
 USER_IMPL * u;
-if (!h)
-    {
-    printfd(__FILE__, "TRAFFCOUNTER_IMPL::Start() - Cannot get users\n");
-    WriteServLog("TRAFFCOUNTER: Cannot get users.");
-    return -1;
-    }
 
 while (users->SearchNext(h, &u) == 0)
     {
@@ -132,11 +136,7 @@ if (stopped)
 running = false;
 
 int h = users->OpenSearch();
-if (!h)
-    {
-    WriteServLog("TRAFFCOUNTER: Fatal error: Cannot get users.");
-    return -1;
-    }
+assert(h && "USERS::OpenSearch is always correct");
 
 USER_IMPL * u;
 while (users->SearchNext(h, &u) == 0)
@@ -152,16 +152,9 @@ for (int i = 0; i < 25 && !stopped; i++)
     nanosleep(&ts, NULL);
     }
 
-//after 5 seconds waiting thread still running. now kill it
 if (!stopped)
-    {
-    printfd(__FILE__, "kill TRAFFCOUNTER thread.\n");
-    if (pthread_kill(thread, SIGINT))
-        {
-        return -1;
-        }
-    printfd(__FILE__, "TRAFFCOUNTER killed\n");
-    }
+    return -1;
+
 printfd(__FILE__, "TRAFFCOUNTER::Stop()\n");
 
 return 0;
@@ -169,6 +162,10 @@ return 0;
 //-----------------------------------------------------------------------------
 void * TRAFFCOUNTER_IMPL::Run(void * data)
 {
+sigset_t signalSet;
+sigfillset(&signalSet);
+pthread_sigmask(SIG_BLOCK, &signalSet, NULL);
+
 TRAFFCOUNTER_IMPL * tc = static_cast<TRAFFCOUNTER_IMPL *>(data);
 tc->stopped = false;
 int c = 0;