]> git.stg.codes - stg.git/blobdiff - projects/stargazer/main.cpp
Merge remote-tracking branch 'origin/master' into ticket
[stg.git] / projects / stargazer / main.cpp
index 3db3b2669ede87b264d6c417108e2fb35342f6bc..702bfb8663930c2aca4efb82a4b85cf5a6e6507e 100644 (file)
@@ -66,7 +66,7 @@ namespace
 std::set<pid_t> executers;
 
 void StartTimer();
-int StartScriptExecuter(char * procName, int msgKey, int * msgID, SETTINGS_IMPL * settings);
+int StartScriptExecuter(char * procName, int msgKey, int * msgID);
 int ForkAndWait(const std::string & confDir);
 void KillExecuters();
 
@@ -89,9 +89,9 @@ else
 }
 //-----------------------------------------------------------------------------
 #if defined(LINUX) || defined(DARWIN)
-int StartScriptExecuter(char * procName, int msgKey, int * msgID, SETTINGS_IMPL * settings)
+int StartScriptExecuter(char * procName, int msgKey, int * msgID)
 #else
-int StartScriptExecuter(char *, int msgKey, int * msgID, SETTINGS_IMPL * settings)
+int StartScriptExecuter(char *, int msgKey, int * msgID)
 #endif
 {
 STG_LOGGER & WriteServLog = GetStgLogger();
@@ -132,7 +132,6 @@ switch (pid)
         return -1;
 
     case 0:
-        delete settings;
 #if defined(LINUX) || defined(DARWIN)
         Executer(*msgID, pid, procName);
 #else
@@ -251,7 +250,7 @@ WriteServLog("Stg v. %s", SERVER_VERSION);
 
 for (size_t i = 0; i < settings.GetExecutersNum(); i++)
     {
-    int ret = StartScriptExecuter(argv[0], settings.GetExecMsgKey(), &msgID, &settings);
+    int ret = StartScriptExecuter(argv[0], settings.GetExecMsgKey(), &msgID);
     if (ret < 0)
         {
         STG_LOGGER & WriteServLog = GetStgLogger();
@@ -267,6 +266,11 @@ for (size_t i = 0; i < settings.GetExecutersNum(); i++)
 
 PIDFile pidFile(settings.GetPIDFileName());
 
+struct sigaction sa;
+memset(&sa, 0, sizeof(sa));
+sa.sa_handler = SIG_DFL;
+sigaction(SIGHUP, &sa, NULL); // Apparently FreeBSD ignores SIGHUP by default when launched from rc.d at bot time.
+
 sigset_t signalSet;
 sigfillset(&signalSet);
 pthread_sigmask(SIG_BLOCK, &signalSet, NULL);
@@ -339,8 +343,16 @@ while (running)
     switch (sig)
         {
         case SIGHUP:
+            {
+            SETTINGS_IMPL newSettings(settings);
+            if (newSettings.ReadSettings())
+                WriteServLog("ReadSettings error. %s", newSettings.GetStrError().c_str());
+            else
+                settings = newSettings;
+            WriteServLog.SetLogFileName(settings.GetLogFileName());
             traffCnt.Reload();
-            manager.reload();
+            manager.reload(settings);
+            }
             break;
         case SIGTERM:
             running = false;
@@ -364,6 +376,8 @@ while (running)
 
 WriteServLog("+++++++++++++++++++++++++++++++++++++++++++++");
 
+manager.stop();
+
 if (loop.Stop())
     WriteServLog("Event loop not stopped.");