X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/2b09d57cf981dcdf7ff90befe75dc4f8621a5fad..04d7ddb9da330539a3026cd26b4ba6d0ee82a395:/projects/stargazer/plugins/other/smux/smux.cpp?ds=inline diff --git a/projects/stargazer/plugins/other/smux/smux.cpp b/projects/stargazer/plugins/other/smux/smux.cpp index bcfc940e..fcc0a9c2 100644 --- a/projects/stargazer/plugins/other/smux/smux.cpp +++ b/projects/stargazer/plugins/other/smux/smux.cpp @@ -34,8 +34,10 @@ return a.first.PrefixLess(b.first); } SMUX_SETTINGS::SMUX_SETTINGS() - : ip(0), - port(0) + : errorStr(), + ip(0), + port(0), + password() {} int SMUX_SETTINGS::ParseSettings(const MODULE_SETTINGS & s) @@ -94,6 +96,11 @@ SMUX::SMUX() services(NULL), corporations(NULL), traffcounter(NULL), + errorStr(), + smuxSettings(), + settings(), + thread(), + mutex(), running(false), stopped(true), sock(-1), @@ -217,22 +224,10 @@ if (!stopped) 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(); @@ -252,12 +247,31 @@ sensors.erase(sensors.begin(), sensors.end()); close(sock); +if (!stopped) + { + running = true; + return -1; + } + printfd(__FILE__, "SMUX::Stop() - After\n"); return 0; } +int SMUX::Reload() +{ +if (Stop()) + return -1; +if (Start()) + return -1; +return 0; +} + void * SMUX::Runner(void * d) { +sigset_t signalSet; +sigfillset(&signalSet); +pthread_sigmask(SIG_BLOCK, &signalSet, NULL); + SMUX * smux = static_cast(d); smux->Run(); @@ -267,8 +281,11 @@ return NULL; void SMUX::Run() { -SendOpenPDU(sock); -SendRReqPDU(sock); +stopped = true; +if (!SendOpenPDU(sock)) + return; +if (!SendRReqPDU(sock)) + return; running = true; stopped = false;