0
0
mirror of https://gitlab.torproject.org/tpo/core/tor.git synced 2024-09-20 12:22:14 +02:00

Notify systemd of ShutdownWaitLength

This commit is contained in:
Alex Xu (Hello71) 2018-10-18 19:54:49 -04:00 committed by teor
parent 0a824bd889
commit 0d6d3e1f26
No known key found for this signature in database
GPG Key ID: 10FEAA0E7075672A
2 changed files with 23 additions and 0 deletions

3
changes/ticket28113 Normal file
View File

@ -0,0 +1,3 @@
o Minor bugfixes (relay shutdown, systemd):
- Notify systemd of ShutdownWaitLength so it can be set to longer than
systemd's TimeoutStopSec. Fixes bug 28113; bugfix on 0.2.6.2-alpha.

View File

@ -837,6 +837,26 @@ hibernate_begin(hibernate_state_t new_state, time_t now)
"connections, and will shut down in %d seconds. Interrupt "
"again to exit now.", options->ShutdownWaitLength);
shutdown_time = time(NULL) + options->ShutdownWaitLength;
#ifdef HAVE_SYSTEMD
/* tell systemd that we may need more than the default 90 seconds to shut
* down so they don't kill us. add some extra time to actually finish
* shutting down, otherwise systemd will kill us immediately after the
* EXTEND_TIMEOUT_USEC expires. this is an *upper* limit; tor will probably
* only take one or two more seconds, but assume that maybe we got swapped
* out and it takes a little while longer.
*
* as of writing, this is a no-op with all-defaults: ShutdownWaitLength is
* 30 seconds, so this will extend the timeout to 60 seconds.
* default systemd DefaultTimeoutStopSec is 90 seconds, so systemd will
* wait (up to) 90 seconds anyways.
*
* 2^31 usec = ~2147 sec = ~35 min. probably nobody will actually set
* ShutdownWaitLength to more than that, but use a longer type so we don't
* need to think about UB on overflow
*/
sd_notifyf(0, "EXTEND_TIMEOUT_USEC=%" PRIu64,
((uint64_t)(options->ShutdownWaitLength) + 30) * TOR_USEC_PER_SEC);
#endif
} else { /* soft limit reached */
hibernate_end_time = interval_end_time;
}