Fixed bug in StartupDelay handling
authorVictor Kirhenshtein <victor@netxms.org>
Tue, 1 Feb 2005 07:58:05 +0000 (07:58 +0000)
committerVictor Kirhenshtein <victor@netxms.org>
Tue, 1 Feb 2005 07:58:05 +0000 (07:58 +0000)
src/agent/core/nxagentd.cpp
src/agent/core/nxagentd.h
src/agent/core/service.cpp

index f87eeb1..604c5be 100644 (file)
@@ -81,6 +81,7 @@ SERVER_INFO g_pServerList[MAX_SERVERS];
 DWORD g_dwServerCount = 0;
 DWORD g_dwTimeOut = 5000;     // Request timeout in milliseconds
 time_t g_dwAgentStartTime;
 DWORD g_dwServerCount = 0;
 DWORD g_dwTimeOut = 5000;     // Request timeout in milliseconds
 time_t g_dwAgentStartTime;
+DWORD g_dwStartupDelay = 0;
 
 #if !defined(_WIN32) && !defined(_NETWARE)
 char g_szPidFile[MAX_PATH] = "/var/run/nxagentd.pid";
 
 #if !defined(_WIN32) && !defined(_NETWARE)
 char g_szPidFile[MAX_PATH] = "/var/run/nxagentd.pid";
@@ -105,7 +106,6 @@ static char *m_pszInstallServerList = NULL;
 static char *m_pszSubagentList = NULL;
 static char *m_pszExtParamList = NULL;
 static CONDITION m_hCondShutdown = INVALID_CONDITION_HANDLE;
 static char *m_pszSubagentList = NULL;
 static char *m_pszExtParamList = NULL;
 static CONDITION m_hCondShutdown = INVALID_CONDITION_HANDLE;
-static DWORD m_dwStartupDelay = 0;
 
 
 //
 
 
 //
@@ -126,7 +126,7 @@ static NX_CFG_TEMPLATE cfgTemplate[] =
    { "RequireAuthentication", CT_BOOLEAN, 0, 0, AF_REQUIRE_AUTH, 0, &g_dwFlags },
    { "Servers", CT_STRING_LIST, ',', 0, 0, 0, &m_pszServerList },
    { "SharedSecret", CT_STRING, 0, 0, MAX_SECRET_LENGTH, 0, g_szSharedSecret },
    { "RequireAuthentication", CT_BOOLEAN, 0, 0, AF_REQUIRE_AUTH, 0, &g_dwFlags },
    { "Servers", CT_STRING_LIST, ',', 0, 0, 0, &m_pszServerList },
    { "SharedSecret", CT_STRING, 0, 0, MAX_SECRET_LENGTH, 0, g_szSharedSecret },
-   { "StartupDelay", CT_LONG, 0, 0, 0, 0, &m_dwStartupDelay },
+   { "StartupDelay", CT_LONG, 0, 0, 0, 0, &g_dwStartupDelay },
    { "SubAgent", CT_STRING_LIST, '\n', 0, 0, 0, &m_pszSubagentList },
    { "Timeout", CT_LONG, 0, 0, 0, 0, &g_dwTimeOut },
    { "", CT_END_OF_LIST, 0, 0, 0, 0, NULL }
    { "SubAgent", CT_STRING_LIST, '\n', 0, 0, 0, &m_pszSubagentList },
    { "Timeout", CT_LONG, 0, 0, 0, 0, &g_dwTimeOut },
    { "", CT_END_OF_LIST, 0, 0, 0, 0, NULL }
@@ -412,6 +412,31 @@ BOOL Initialize(void)
       free(m_pszExtParamList);
    }
 
       free(m_pszExtParamList);
    }
 
+   ThreadSleep(1);
+
+   // If StartupDelay is greater than zero, then wait
+   if (g_dwStartupDelay > 0)
+   {
+      if (g_dwFlags & AF_DAEMON)
+      {
+         ThreadSleep(g_dwStartupDelay);
+      }
+      else
+      {
+         DWORD i;
+
+         printf("XXXXXX%*s]\rWAIT [", g_dwStartupDelay, " ");
+         fflush(stdout);
+         for(i = 0; i < g_dwStartupDelay; i++)
+         {
+            ThreadSleep(1);
+            putc('.', stdout);
+            fflush(stdout);
+         }
+         printf("\n");
+      }
+   }
+
    // Agent start time
    g_dwAgentStartTime = time(NULL);
 
    // Agent start time
    g_dwAgentStartTime = time(NULL);
 
@@ -455,27 +480,6 @@ void Shutdown(void)
 
 void Main(void)
 {
 
 void Main(void)
 {
-   if (m_dwStartupDelay > 0)
-   {
-      if (g_dwFlags & AF_DAEMON)
-      {
-         ThreadSleep(m_dwStartupDelay);
-      }
-      else
-      {
-         DWORD i;
-
-         printf("XXXXXX%*s]\rWAIT [", m_dwStartupDelay, " ");
-         fflush(stdout);
-         for(i = 0; i < m_dwStartupDelay; i++)
-         {
-            ThreadSleep(1);
-            putc('.', stdout);
-            fflush(stdout);
-         }
-         printf("\n");
-      }
-   }
    WriteLog(MSG_AGENT_STARTED, EVENTLOG_INFORMATION_TYPE, NULL);
 
    if (g_dwFlags & AF_DAEMON)
    WriteLog(MSG_AGENT_STARTED, EVENTLOG_INFORMATION_TYPE, NULL);
 
    if (g_dwFlags & AF_DAEMON)
index adf5dd3..452d678 100644 (file)
@@ -328,6 +328,7 @@ extern SERVER_INFO g_pServerList[];
 extern DWORD g_dwServerCount;
 extern time_t g_dwAgentStartTime;
 extern char g_szPlatformSuffix[];
 extern DWORD g_dwServerCount;
 extern time_t g_dwAgentStartTime;
 extern char g_szPlatformSuffix[];
+extern DWORD g_dwStartupDelay;
 
 extern DWORD g_dwAcceptErrors;
 extern DWORD g_dwAcceptedConnections;
 
 extern DWORD g_dwAcceptErrors;
 extern DWORD g_dwAcceptedConnections;
index e9add30..68b8693 100644 (file)
@@ -84,7 +84,7 @@ static VOID WINAPI AgentServiceMain(DWORD argc, LPTSTR *argv)
    status.dwWin32ExitCode = 0;
    status.dwServiceSpecificExitCode = 0;
    status.dwCheckPoint = 0;
    status.dwWin32ExitCode = 0;
    status.dwServiceSpecificExitCode = 0;
    status.dwCheckPoint = 0;
-   status.dwWaitHint = 2000;
+   status.dwWaitHint = 3000 + g_dwStartupDelay * 1000;
    SetServiceStatus(serviceHandle, &status);
 
    // Actual initialization
    SetServiceStatus(serviceHandle, &status);
 
    // Actual initialization