summaryrefslogtreecommitdiff
path: root/lib/server/Daemon.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/server/Daemon.cpp')
-rwxr-xr-xlib/server/Daemon.cpp14
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);
}