]> git.stg.codes - stg.git/blobdiff - projects/stargazer/plugins/other/smux/smux.cpp
Do not use pthread_kill to stop a thread
[stg.git] / projects / stargazer / plugins / other / smux / smux.cpp
index 61ed80269f9bf9275460cb451c43d12f8575c761..fcc0a9c2349e5afbe070072f3ee9a85beb73f001 100644 (file)
@@ -224,22 +224,10 @@ if (!stopped)
         struct timespec ts = {0, 200000000};
         nanosleep(&ts, NULL);
         }
         struct timespec ts = {0, 200000000};
         nanosleep(&ts, NULL);
         }
-
-    //after 5 seconds waiting thread still running. now killing it
-    if (!stopped)
-        {
-        printfd(__FILE__, "SMUX::Stop() - failed to stop thread, killing it\n");
-        if (pthread_kill(thread, SIGINT))
-            {
-            errorStr = "Cannot kill thread.";
-            printfd(__FILE__, "SMUX::Stop() - Cannot kill thread\n");
-            return -1;
-            }
-        printfd(__FILE__, "SMUX::Stop() -  killed Run\n");
-        }
     }
 
     }
 
-pthread_join(thread, NULL);
+if (stopped)
+    pthread_join(thread, NULL);
 
 ResetNotifiers();
 
 
 ResetNotifiers();
 
@@ -259,6 +247,12 @@ sensors.erase(sensors.begin(), sensors.end());
 
 close(sock);
 
 
 close(sock);
 
+if (!stopped)
+    {
+    running = true;
+    return -1;
+    }
+
 printfd(__FILE__, "SMUX::Stop() - After\n");
 return 0;
 }
 printfd(__FILE__, "SMUX::Stop() - After\n");
 return 0;
 }
@@ -274,6 +268,10 @@ return 0;
 
 void * SMUX::Runner(void * d)
 {
 
 void * SMUX::Runner(void * d)
 {
+sigset_t signalSet;
+sigfillset(&signalSet);
+pthread_sigmask(SIG_BLOCK, &signalSet, NULL);
+
 SMUX * smux = static_cast<SMUX *>(d);
 
 smux->Run();
 SMUX * smux = static_cast<SMUX *>(d);
 
 smux->Run();