fix -daemon switch
authortcatm <tcatm@gawab.com>
Thu, 3 Mar 2011 21:26:00 +0000 (22:26 +0100)
committertcatm <tcatm@gawab.com>
Thu, 3 Mar 2011 21:26:00 +0000 (22:26 +0100)
init.cpp
util.cpp
util.h

index 9c84dca..a9b7a7d 100644 (file)
--- a/init.cpp
+++ b/init.cpp
@@ -74,32 +74,11 @@ void HandleSIGTERM(int)
 #ifndef GUI
 int main(int argc, char* argv[])
 {
-    for (int i = 1; i < argc; i++)
-        if (!IsSwitchChar(argv[i][0]))
-            fCommandLine = true;
-    fDaemon = !fCommandLine;
-
-#ifdef __WXGTK__
-    if (!fCommandLine)
-    {
-        // Daemonize
-        pid_t pid = fork();
-        if (pid < 0)
-        {
-            fprintf(stderr, "Error: fork() returned %d errno %d\n", pid, errno);
-            return 1;
-        }
-        if (pid > 0)
-            pthread_exit((void*)0);
-    }
-#endif
-
-    if (!AppInit(argc, argv))
-        return 1;
+    bool fRet = false;
+    fRet = AppInit(argc, argv);
 
-    while (!fShutdown)
-        Sleep(1000000);
-    return 0;
+    if (fRet && fDaemon)
+        pthread_exit((void*)0);
 }
 #endif
 
@@ -113,7 +92,7 @@ bool AppInit(int argc, char* argv[])
     catch (std::exception& e) {
         PrintException(&e, "AppInit()");
     } catch (...) {
-        PrintException(NULL, "AppInit()");
+           PrintException(NULL, "AppInit()");
     }
     if (!fRet)
         Shutdown(NULL);
@@ -213,6 +192,18 @@ bool AppInit2(int argc, char* argv[])
 
     fDebug = GetBoolArg("-debug");
 
+    fDaemon = GetBoolArg("-daemon");
+
+    if (fDaemon)
+        fServer = true;
+    else
+        fServer = GetBoolArg("-server");
+
+    /* force fServer when running without GUI */
+#ifndef GUI
+    fServer = true;
+#endif
+
     fPrintToConsole = GetBoolArg("-printtoconsole");
     fPrintToDebugger = GetBoolArg("-printtodebugger");
 
@@ -220,12 +211,31 @@ bool AppInit2(int argc, char* argv[])
     
     fNoListen = GetBoolArg("-nolisten");
 
+    for (int i = 1; i < argc; i++)
+        if (!IsSwitchChar(argv[i][0]))
+            fCommandLine = true;
+
     if (fCommandLine)
     {
         int ret = CommandLineRPC(argc, argv);
         exit(ret);
     }
 
+#ifndef GUI
+    if (fDaemon)
+    {
+        // Daemonize
+        pid_t pid = fork();
+        if (pid < 0)
+        {
+            fprintf(stderr, "Error: fork() returned %d errno %d\n", pid, errno);
+            return false;
+        }
+        if (pid > 0)
+            return true;
+    }
+#endif
+
     if (!fDebug && !pszSetDataDir[0])
         ShrinkDebugFile();
     printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
@@ -443,7 +453,7 @@ bool AppInit2(int argc, char* argv[])
     if (!CreateThread(StartNode, NULL))
         wxMessageBox("Error: CreateThread(StartNode) failed", "Bitcoin");
 
-    if (GetBoolArg("-server") || fDaemon)
+    if (fServer)
         CreateThread(ThreadRPCServer, NULL);
 
 #if defined(__WXMSW__) && defined(GUI)
index 8a2f9d5..124174b 100644 (file)
--- a/util.cpp
+++ b/util.cpp
@@ -14,6 +14,7 @@ char pszSetDataDir[MAX_PATH] = "";
 bool fRequestShutdown = false;
 bool fShutdown = false;
 bool fDaemon = false;
+bool fServer = false;
 bool fCommandLine = false;
 string strMiscWarning;
 bool fTestNet = false;
diff --git a/util.h b/util.h
index c69bf1c..1b780d5 100644 (file)
--- a/util.h
+++ b/util.h
@@ -143,6 +143,7 @@ extern char pszSetDataDir[MAX_PATH];
 extern bool fRequestShutdown;
 extern bool fShutdown;
 extern bool fDaemon;
+extern bool fServer;
 extern bool fCommandLine;
 extern string strMiscWarning;
 extern bool fTestNet;