]> git.stg.codes - stg.git/blobdiff - projects/stargazer/plugins/other/ping/ping.cpp
Fixed admin provoledges reseting after password change. Fixes #28.
[stg.git] / projects / stargazer / plugins / other / ping / ping.cpp
index c824067979e3243711ffe7f5e813b21692b0368c..7f47b7cf8464906ee754cc9c3977ca054ca100a8 100644 (file)
@@ -74,7 +74,8 @@ PING::PING()
       ChgCurrIPNotifierList(),
       ChgIPNotifierList(),
       onAddUserNotifier(*this),
-      onDelUserNotifier(*this)
+      onDelUserNotifier(*this),
+      logger(GetPluginLogger(GetStgLogger(), "ping"))
 {
 pthread_mutex_init(&mutex, NULL);
 }
@@ -107,6 +108,7 @@ pinger.Start();
 if (pthread_create(&thread, NULL, Run, this))
     {
     errorStr = "Cannot start thread.";
+    logger("Cannot create thread.");
     printfd(__FILE__, "Cannot start thread\n");
     return -1;
     }
@@ -133,19 +135,6 @@ for (int i = 0; i < 25; i++)
     nanosleep(&ts, NULL);
     }
 
-//after 5 seconds waiting thread still running. now kill it
-if (isRunning)
-    {
-    printfd(__FILE__, "kill PING thread.\n");
-    if (pthread_kill(thread, SIGINT))
-        {
-        errorStr = "Cannot kill PING thread.";
-        printfd(__FILE__, "Cannot kill PING thread.\n");
-        return -1;
-        }
-    printfd(__FILE__, "PING killed\n");
-    }
-
 users->DelNotifierUserAdd(&onAddUserNotifier);
 users->DelNotifierUserDel(&onDelUserNotifier);
 
@@ -157,6 +146,9 @@ while (users_iter != usersList.end())
     ++users_iter;
     }
 
+if (isRunning)
+    return -1;
+
 return 0;
 }
 //-----------------------------------------------------------------------------
@@ -167,7 +159,11 @@ return isRunning;
 //-----------------------------------------------------------------------------
 void * PING::Run(void * d)
 {
-PING * ping = (PING *)d;
+sigset_t signalSet;
+sigfillset(&signalSet);
+pthread_sigmask(SIG_BLOCK, &signalSet, NULL);
+
+PING * ping = static_cast<PING *>(d);
 ping->isRunning = true;
 
 long delay = (10000000 * ping->pingSettings.GetPingDelay()) / 3 + 50000000;