|
|
@ -265,18 +265,31 @@ void Shutdown() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Signal handlers are very limited in what they are allowed to do, so: |
|
|
|
* Signal handlers are very limited in what they are allowed to do. |
|
|
|
|
|
|
|
* The execution context the handler is invoked in is not guaranteed, |
|
|
|
|
|
|
|
* so we restrict handler operations to just touching variables: |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
void HandleSIGTERM(int) |
|
|
|
static void HandleSIGTERM(int) |
|
|
|
{ |
|
|
|
{ |
|
|
|
fRequestShutdown = true; |
|
|
|
fRequestShutdown = true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void HandleSIGHUP(int) |
|
|
|
static void HandleSIGHUP(int) |
|
|
|
{ |
|
|
|
{ |
|
|
|
fReopenDebugLog = true; |
|
|
|
fReopenDebugLog = true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef WIN32 |
|
|
|
|
|
|
|
static void registerSignalHandler(int signal, void(*handler)(int)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
struct sigaction sa; |
|
|
|
|
|
|
|
sa.sa_handler = handler; |
|
|
|
|
|
|
|
sigemptyset(&sa.sa_mask); |
|
|
|
|
|
|
|
sa.sa_flags = 0; |
|
|
|
|
|
|
|
sigaction(signal, &sa, NULL); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
bool static Bind(CConnman& connman, const CService &addr, unsigned int flags) { |
|
|
|
bool static Bind(CConnman& connman, const CService &addr, unsigned int flags) { |
|
|
|
if (!(flags & BF_EXPLICIT) && IsLimited(addr)) |
|
|
|
if (!(flags & BF_EXPLICIT) && IsLimited(addr)) |
|
|
|
return false; |
|
|
|
return false; |
|
|
@ -848,19 +861,11 @@ bool AppInitBasicSetup() |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Clean shutdown on SIGTERM
|
|
|
|
// Clean shutdown on SIGTERM
|
|
|
|
struct sigaction sa; |
|
|
|
registerSignalHandler(SIGTERM, HandleSIGTERM); |
|
|
|
sa.sa_handler = HandleSIGTERM; |
|
|
|
registerSignalHandler(SIGINT, HandleSIGTERM); |
|
|
|
sigemptyset(&sa.sa_mask); |
|
|
|
|
|
|
|
sa.sa_flags = 0; |
|
|
|
|
|
|
|
sigaction(SIGTERM, &sa, NULL); |
|
|
|
|
|
|
|
sigaction(SIGINT, &sa, NULL); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Reopen debug.log on SIGHUP
|
|
|
|
// Reopen debug.log on SIGHUP
|
|
|
|
struct sigaction sa_hup; |
|
|
|
registerSignalHandler(SIGHUP, HandleSIGHUP); |
|
|
|
sa_hup.sa_handler = HandleSIGHUP; |
|
|
|
|
|
|
|
sigemptyset(&sa_hup.sa_mask); |
|
|
|
|
|
|
|
sa_hup.sa_flags = 0; |
|
|
|
|
|
|
|
sigaction(SIGHUP, &sa_hup, NULL); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Ignore SIGPIPE, otherwise it will bring the daemon down if the client closes unexpectedly
|
|
|
|
// Ignore SIGPIPE, otherwise it will bring the daemon down if the client closes unexpectedly
|
|
|
|
signal(SIGPIPE, SIG_IGN); |
|
|
|
signal(SIGPIPE, SIG_IGN); |
|
|
|