diff options
Diffstat (limited to 'lib/server/Daemon.cpp')
-rwxr-xr-x | lib/server/Daemon.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/lib/server/Daemon.cpp b/lib/server/Daemon.cpp index 31997fb6..1885c6c8 100755 --- a/lib/server/Daemon.cpp +++ b/lib/server/Daemon.cpp @@ -141,7 +141,11 @@ int Daemon::Main(const char *DefaultConfigFile, int argc, const char *argv[]) SetupInInitialProcess(); // Set signal handler - if(::signal(SIGHUP, SignalHandler) == SIG_ERR || ::signal(SIGTERM, SignalHandler) == SIG_ERR) + struct sigaction sa; + sa.sa_handler = SignalHandler; + sa.sa_flags = 0; + ::sigemptyset(&sa.sa_mask); + if(::sigaction(SIGHUP, &sa, NULL) != 0 || ::sigaction(SIGTERM, &sa, NULL) != 0) { THROW_EXCEPTION(ServerException, DaemoniseFailed) } @@ -354,8 +358,12 @@ int Daemon::Main(const char *DefaultConfigFile, int argc, const char *argv[]) void Daemon::EnterChild() { // Unset signal handlers - ::signal(SIGHUP, SIG_DFL); - ::signal(SIGTERM, SIG_DFL); + struct sigaction sa; + sa.sa_handler = SIG_DFL; + sa.sa_flags = 0; + ::sigemptyset(&sa.sa_mask); + ::sigaction(SIGHUP, &sa, NULL); + ::sigaction(SIGTERM, &sa, NULL); } |