From 648c65868cab0124935545bcaae934d34ae08d98 Mon Sep 17 00:00:00 2001 From: Yat Ho Date: Wed, 29 Oct 2025 22:04:04 +0800 Subject: [PATCH] feat: use `Type=notify-reload` in daemon service (#7570) * feat: use `Type=notify-reload` in daemon service * build: keep systemd names consistent --------- Co-authored-by: Charles Kerr --- daemon/CMakeLists.txt | 2 +- daemon/daemon.cc | 27 ++++++++++++++++++++++++++- daemon/transmission-daemon.service.in | 3 +-- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/daemon/CMakeLists.txt b/daemon/CMakeLists.txt index 47a3ef4aa..000bc3705 100644 --- a/daemon/CMakeLists.txt +++ b/daemon/CMakeLists.txt @@ -15,7 +15,7 @@ tr_allow_compile_if( target_compile_definitions(${TR_NAME}-daemon PRIVATE - $<$:USE_SYSTEMD>) + $<$:WITH_SYSTEMD>) tr_target_compile_definitions_for_headers(${TR_NAME}-daemon PRIVATE diff --git a/daemon/daemon.cc b/daemon/daemon.cc index f28df4ea3..cf8b266f4 100644 --- a/daemon/daemon.cc +++ b/daemon/daemon.cc @@ -6,6 +6,7 @@ #include #include #include +#include #include /* printf */ #include #include /* std::back_inserter */ @@ -48,7 +49,10 @@ struct tr_ctor; struct tr_session; struct tr_torrent; -#ifdef USE_SYSTEMD +#ifdef WITH_SYSTEMD + +#include +#include #include @@ -705,6 +709,25 @@ void tr_daemon::reconfigure() } else { +#ifdef WITH_SYSTEMD + auto ts = timespec{}; + if (clock_gettime(CLOCK_MONOTONIC, &ts) < 0) + { + auto error = tr_error{}; + error.set_from_errno(errno); + tr_logAddError(fmt::format( + fmt::runtime(_("Failed to reload: Failed to get current monotonic time: {errmsg} ({errno})")), + fmt::arg("errmsg", error.message()), + fmt::arg("errno", error.code()))); + return; + } + + sd_notifyf( + 0, + "STATUS=Reloading...\nRELOADING=1\nMONOTONIC_USEC=%" PRIu64 "\n", + static_cast(ts.tv_sec) * 1000000U + static_cast(ts.tv_nsec) / 1000U); +#endif + char const* configDir; /* reopen the logfile to allow for log rotation */ @@ -718,6 +741,8 @@ void tr_daemon::reconfigure() tr_sessionSet(my_session_, load_settings(configDir)); tr_sessionReloadBlocklists(my_session_); + + sd_notify(0, "STATUS=Reload complete.\nREADY=1\n"); } } diff --git a/daemon/transmission-daemon.service.in b/daemon/transmission-daemon.service.in index 6692108b5..118025646 100644 --- a/daemon/transmission-daemon.service.in +++ b/daemon/transmission-daemon.service.in @@ -6,9 +6,8 @@ Documentation=man:@TR_NAME@-daemon(1) [Service] User=transmission -Type=notify +Type=notify-reload ExecStart=@CMAKE_INSTALL_FULL_BINDIR@/@TR_NAME@-daemon -f --log-level=error -ExecReload=/bin/kill -s HUP $MAINPID # Hardening CapabilityBoundingSet=