diff --git a/init.cpp b/init.cpp index 9c84dca16..a9b7a7d2f 100644 --- 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; + bool fRet = false; + fRet = AppInit(argc, argv); -#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; - - 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) diff --git a/util.cpp b/util.cpp index 8a2f9d525..124174bd9 100644 --- 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 c69bf1ce1..1b780d552 100644 --- 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;