|
|
@ -17,14 +17,17 @@ void handle_signal(int sig) |
|
|
|
{ |
|
|
|
{ |
|
|
|
switch (sig) |
|
|
|
switch (sig) |
|
|
|
{ |
|
|
|
{ |
|
|
|
case SIGHUP: |
|
|
|
case SIGHUP: |
|
|
|
LogPrint(eLogInfo, "Daemon: Got SIGHUP, reopening log..."); |
|
|
|
LogPrint(eLogInfo, "Daemon: Got SIGHUP, reopening log..."); |
|
|
|
i2p::log::Logger().Reopen (); |
|
|
|
i2p::log::Logger().Reopen (); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case SIGABRT: |
|
|
|
case SIGINT: |
|
|
|
case SIGTERM: |
|
|
|
Daemon.gracefullShutdownInterval = 10*60; // 10 minutes
|
|
|
|
case SIGINT: |
|
|
|
LogPrint(eLogInfo, "Graceful shutdown after ", Daemon.gracefullShutdownInterval, " seconds"); |
|
|
|
Daemon.running = 0; // Exit loop
|
|
|
|
break; |
|
|
|
|
|
|
|
case SIGABRT: |
|
|
|
|
|
|
|
case SIGTERM: |
|
|
|
|
|
|
|
Daemon.running = 0; // Exit loop
|
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -96,6 +99,7 @@ namespace i2p |
|
|
|
return false; |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
gracefullShutdownInterval = 0; // not specified
|
|
|
|
|
|
|
|
|
|
|
|
// Signal handler
|
|
|
|
// Signal handler
|
|
|
|
struct sigaction sa; |
|
|
|
struct sigaction sa; |
|
|
@ -122,6 +126,15 @@ namespace i2p |
|
|
|
while (running) |
|
|
|
while (running) |
|
|
|
{ |
|
|
|
{ |
|
|
|
std::this_thread::sleep_for (std::chrono::seconds(1)); |
|
|
|
std::this_thread::sleep_for (std::chrono::seconds(1)); |
|
|
|
|
|
|
|
if (gracefullShutdownInterval) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
gracefullShutdownInterval--; // - 1 second
|
|
|
|
|
|
|
|
if (gracefullShutdownInterval <= 0) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
LogPrint(eLogInfo, "Graceful shutdown"); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|