Improve shutdown diagnostics to identify SIGTERM source#2839
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
Improves FTL shutdown observability by preserving and re-logging SIGTERM sender details close to the final termination banner, promoting shutdown logging to INFO, and adjusting webserver thread sleep behavior to reduce misleading “idle” shutdown diagnostics.
Changes:
- Persist SIGTERM sender information in
signals.cand re-log it duringcleanup()near the final termination banner. - Promote shutdown-entry logging in
main.cfrom DEBUG to INFO and add regression tests validating presence and ordering of key shutdown log lines. - Split the webserver thread’s 24-hour sleep into 1-hour intervals with
killedchecks.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
test/test_final.bats |
Adds regression tests for shutdown INFO logging and message ordering near termination. |
src/webserver/webserver.c |
Changes cert-check idle sleep to 24×1h intervals with intermediate killed checks. |
src/signals.h |
Exposes get_term_source() for retrieving persisted SIGTERM sender info. |
src/signals.c |
Stores SIGTERM sender info in a static buffer and provides get_term_source(). |
src/main.c |
Promotes “Shutting down …” log line from DEBUG to INFO. |
src/daemon.c |
Re-logs the stored SIGTERM source immediately before the final termination banner. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Issue #2818 reports FTL terminating cleanly (code 0) after ~15-16 hours of uptime, with the only captured log lines being: Thread webserver (7) is idle, terminating it. All threads joined ########## FTL terminated after 15h 50m 45s (code 0)! ########## A thorough audit of all paths that can set the global `killed` flag confirms there is no internal code path leading to spontaneous termination - every shutdown is either test-mode (`pihole-FTL test`), a `die()`/longjmp from dnsmasq, or an external SIGTERM mapped to dnsmasq's EVENT_TERM via SIGUSR6. The "Thread webserver (7) is idle" message is a red herring: the webserver cert-renewal thread sleeps for 24 hours between checks, so it is essentially always cancellable when shutdown begins. The reason the reporter could not diagnose the cause is that the relevant information was either logged at DEBUG level (and therefore invisible) or emitted far above the final termination message (and therefore lost when the log was truncated). This commit closes both gaps so the next occurrence will be diagnosable from a tail of FTL.log alone: - signals.c: persist the SIGTERM sender info ("name (PID, user UID)") into a static buffer in SIGTERM_handler, exposed via get_term_source(). The buffer is sized 256 bytes and only ever read after being written by the signal handler, so no locking is needed. - daemon.c: in cleanup(), re-log the stored SIGTERM source as "Terminated by ..." right before the final "FTL terminated after" banner. Even when the log is truncated to the last few lines, the termination source will now be visible alongside the final message. - main.c: promote the "Shutting down (exit code, jmpret)" log from log_debug to log_info so the entry into the cleanup path is always recorded, not just under DEBUG_ANY. - webserver/webserver.c: split the webserver thread's 24-hour cert-check sleep into 24 x 1-hour sleeps with intermediate `killed` checks. This is a robustness improvement, not a bug fix: the thread is no longer marked as cancellable for 24 hours straight, so the misleading "is idle" log on shutdown happens at most an hour after the last cert check rather than at any point in a 24-hour window. - test/test_final.bats: add two regression tests that run after the existing "FTL terminates with message" test: * Verify "INFO: Shutting down (exit code" is present (catches accidental regression of the log_debug -> log_info change). * Verify "INFO: Terminated by" is present AND that the three key messages appear in order: Shutting down -> Terminated by -> FTL terminated after. After this change, a SIGTERM-triggered shutdown produces: INFO: Asked to terminate by "systemd" (PID 1, user root UID 0) ... INFO: Shutting down (exit code 0, jmpret 0) INFO: Finished final database update INFO: Waiting for threads to join INFO: Thread webserver (7) is idle, terminating it. INFO: All threads joined INFO: Terminated by "systemd" (PID 1, user root UID 0) INFO: ########## FTL terminated after 15h 50m 45s (code 0)! ########## Signed-off-by: Dominik <dl6er@dl6er.de>
75a7c6b to
3952f05
Compare
…lity
The EXTRAWARN_GCC7 and EXTRAWARN_GCC8 blocks in CMakeLists.txt only
checked compiler version, not compiler identity. Clang (which reports
version >= 8) entered these blocks and received GCC-only flags like
-Wsuggest-attribute=pure, causing a fatal error under -Werror:
error: unknown warning group '-Wsuggest-attribute=pure',
ignored [-Werror,-Wunknown-warning-option]
Similarly, the #pragma GCC diagnostic in signals.c that suppresses
-Wsuggest-attribute=pure for get_term_source() triggered the same
error on clang.
- CMakeLists.txt: add CMAKE_C_COMPILER_ID STREQUAL "GNU" guard to
the GCC 7+ and GCC 8+ warning blocks, matching the existing guard
on EXTRAWARN_GCC6 and the hardening flags.
- signals.c: wrap the #pragma GCC diagnostic push/pop with
#if defined(__GNUC__) && !defined(__clang__) so clang never sees
the unsupported warning group.
Signed-off-by: Dominik <dl6er@dl6er.de>
yubiuser
approved these changes
Apr 10, 2026
yubiuser
left a comment
Member
There was a problem hiding this comment.
Before:
2026-04-10 18:56:43.611 UTC [1738720M] INFO: Asked to terminate by "/sbin/init" (PID 1, user root UID 0)
2026-04-10 18:56:43.612 UTC [1738720/T1738756] INFO: Terminating timer thread
2026-04-10 18:56:43.656 UTC [1738720/T1738753] INFO: Terminating database thread
2026-04-10 18:56:43.692 UTC [1738720/T1738755] INFO: Terminating resolver thread
2026-04-10 18:56:43.782 UTC [1738720/T1738754] INFO: Terminating GC thread
2026-04-10 18:56:43.864 UTC [1738720M] INFO: Finished final database update
2026-04-10 18:56:43.864 UTC [1738720M] INFO: Waiting for threads to join
2026-04-10 18:56:43.864 UTC [1738720M] INFO: Thread ntp-client (4) is idle, terminating it.
2026-04-10 18:56:43.864 UTC [1738720M] INFO: Thread webserver (7) is idle, terminating it.
2026-04-10 18:56:43.864 UTC [1738720M] INFO: All threads joined
2026-04-10 18:56:43.865 UTC [1738720M] INFO: PID file emptied
2026-04-10 18:56:43.867 UTC [1738720M] INFO: Stored 0 API sessions in the database
2026-04-10 18:56:44.497 UTC [1738720M] INFO: ########## FTL terminated after 3h 54m 51s (code 0)! ##########
After
2026-04-10 18:58:30.392 UTC [1819638M] INFO: Asked to terminate by "/sbin/init" (PID 1, user root UID 0)
2026-04-10 18:58:30.392 UTC [1819638M] INFO: Shutting down (exit code 0, jmpret 0)
2026-04-10 18:58:30.430 UTC [1819638/T1819676] INFO: Terminating timer thread
2026-04-10 18:58:30.447 UTC [1819638/T1819673] INFO: Terminating database thread
2026-04-10 18:58:30.630 UTC [1819638/T1819674] INFO: Terminating GC thread
2026-04-10 18:58:30.663 UTC [1819638M] INFO: Finished final database update
2026-04-10 18:58:30.663 UTC [1819638M] INFO: Waiting for threads to join
2026-04-10 18:58:30.664 UTC [1819638M] INFO: Thread dns-client (2) is idle, terminating it.
2026-04-10 18:58:32.000 UTC [1819638/T1819672] INFO: Terminating NTP thread
2026-04-10 18:58:32.000 UTC [1819638M] INFO: Thread webserver (7) is idle, terminating it.
2026-04-10 18:58:32.000 UTC [1819638M] INFO: All threads joined
2026-04-10 18:58:32.001 UTC [1819638M] INFO: PID file emptied
2026-04-10 18:58:32.003 UTC [1819638M] INFO: Stored 0 API sessions in the database
2026-04-10 18:58:32.650 UTC [1819638M] INFO: Terminated by "/sbin/init" (PID 1, user root UID 0)
2026-04-10 18:58:32.651 UTC [1819638M] INFO: ########## FTL terminated after 15s (code 0)! ##########
|
This pull request has been mentioned on Pi-hole Userspace. There might be relevant details there: https://discourse.pi-hole.net/t/pi-hole-ftl-v6-6-1-and-core-v6-4-2-released/85843/1 |
github-actions Bot
pushed a commit
to bigbeartechworld/big-bear-universal-apps
that referenced
this pull request
Apr 25, 2026
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [pihole/pihole](https://redirect.github.com/pi-hole/docker-pi-hole) | patch | `2026.04.0` → `2026.04.1` | --- ### Release Notes <details> <summary>pi-hole/docker-pi-hole (pihole/pihole)</summary> ### [`v2026.04.1`](https://redirect.github.com/pi-hole/docker-pi-hole/releases/tag/2026.04.1) [Compare Source](https://redirect.github.com/pi-hole/docker-pi-hole/compare/2026.04.0...2026.04.1) <!-- Release notes generated using configuration in .github/release.yml at master --> ##### What's Changed - docs: update capability documentation links by [@​SirRGB](https://redirect.github.com/SirRGB) in [#​2025](https://redirect.github.com/pi-hole/docker-pi-hole/pull/2025) ##### New Contributors - [@​SirRGB](https://redirect.github.com/SirRGB) made their first contribution in [#​2025](https://redirect.github.com/pi-hole/docker-pi-hole/pull/2025) **Full Changelog**: <pi-hole/docker-pi-hole@2026.04.0...2026.04.1> ##### New component versions included in this tag: ##### What's Changed (FTL v6.6.1) - Add new `GET /api/config/_properties` endpoint by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2356](https://redirect.github.com/pi-hole/FTL/pull/2356) - Fix thread-safety issues causing SIGSEGV under concurrent API load by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2835](https://redirect.github.com/pi-hole/FTL/pull/2835) - fix: fix rare race condition for SHM strings in API handlers by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2833](https://redirect.github.com/pi-hole/FTL/pull/2833) - Accept punycode domains that libidn2 rejects under IDNA2008 by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2838](https://redirect.github.com/pi-hole/FTL/pull/2838) - Improve shutdown diagnostics to identify SIGTERM source by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2839](https://redirect.github.com/pi-hole/FTL/pull/2839) - Resolve empty backtraces when addr2line is not installed by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2831](https://redirect.github.com/pi-hole/FTL/pull/2831) - Improve thread-safety for concurrent API requests by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2847](https://redirect.github.com/pi-hole/FTL/pull/2847) - Don't skip device lookup when resolver.macNames is disabled by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2846](https://redirect.github.com/pi-hole/FTL/pull/2846) - Fix linker error when compiling w/o optimization by [@​aeolio](https://redirect.github.com/aeolio) in [pi-hole/FTL#2850](https://redirect.github.com/pi-hole/FTL/pull/2850) - Clarify `dns.blockESNI` wording by [@​darkexplosiveqwx](https://redirect.github.com/darkexplosiveqwx) in [pi-hole/FTL#2784](https://redirect.github.com/pi-hole/FTL/pull/2784) - Preserve log file path config when fopen fails by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2834](https://redirect.github.com/pi-hole/FTL/pull/2834) ##### Security advisories - <GHSA-6w8x-p785-6pm4> - Fixed with : [pi-hole/FTL@`88c569a`](https://redirect.github.com/pi-hole/FTL/commit/88c569aa026d905d0066135bb71f36a13acf4bf4) and [pi-hole/pi-hole@`7ccb8dd`](https://redirect.github.com/pi-hole/pi-hole/commit/7ccb8ddfb085479fa96e801886eb1cdbeaf3a720) - <GHSA-9cqv-839p-gpq2> - Fixed with : [pi-hole/FTL@`0c46e4e`](https://redirect.github.com/pi-hole/FTL/commit/0c46e4ec7fe57f762fce261625f2cf5d43806e6d) ##### New Contributors - [@​darkexplosiveqwx](https://redirect.github.com/darkexplosiveqwx) made their first contribution in [pi-hole/FTL#2784](https://redirect.github.com/pi-hole/FTL/pull/2784) **Full Changelog**: <pi-hole/FTL@v6.6...v6.6.1> ##### What's Changed (Core v6.4.2) - Wipe version file before creating a new one by [@​yubiuser](https://redirect.github.com/yubiuser) in [pi-hole/pi-hole#6538](https://redirect.github.com/pi-hole/pi-hole/pull/6538) - Fix ownership permissions for containing directories in fix\_owner\_per… by [@​PromoFaux](https://redirect.github.com/PromoFaux) in [pi-hole/pi-hole#6589](https://redirect.github.com/pi-hole/pi-hole/pull/6589) - Remove reference to /usr/local/bin/COL\_TABLE by [@​darkexplosiveqwx](https://redirect.github.com/darkexplosiveqwx) in [pi-hole/pi-hole#6594](https://redirect.github.com/pi-hole/pi-hole/pull/6594) - Skip apt cache update when pihole-meta is current by [@​PromoFaux](https://redirect.github.com/PromoFaux) in [pi-hole/pi-hole#6581](https://redirect.github.com/pi-hole/pi-hole/pull/6581) - Set versions in /etc/pihole/versions to null if script fails by [@​yubiuser](https://redirect.github.com/yubiuser) in [pi-hole/pi-hole#6550](https://redirect.github.com/pi-hole/pi-hole/pull/6550) - Remove redundant touching of logfiles from systemd Service by [@​yubiuser](https://redirect.github.com/yubiuser) in [pi-hole/pi-hole#6601](https://redirect.github.com/pi-hole/pi-hole/pull/6601) - Loosen requirements for local file access for gravity by [@​yubiuser](https://redirect.github.com/yubiuser) in [pi-hole/pi-hole#6430](https://redirect.github.com/pi-hole/pi-hole/pull/6430) - Fix permission for \*.etag files after gravity run by [@​yubiuser](https://redirect.github.com/yubiuser) in [pi-hole/pi-hole#6353](https://redirect.github.com/pi-hole/pi-hole/pull/6353) - add logrotate to DEB and RPM dependencies by [@​darkexplosiveqwx](https://redirect.github.com/darkexplosiveqwx) in [pi-hole/pi-hole#6524](https://redirect.github.com/pi-hole/pi-hole/pull/6524) - Improve gravity error message including curl exit code and errormsg by [@​rdwebdesign](https://redirect.github.com/rdwebdesign) in [pi-hole/pi-hole#6605](https://redirect.github.com/pi-hole/pi-hole/pull/6605) ##### Security advisories - <GHSA-6w8x-p785-6pm4> - Fixed with : [pi-hole/pi-hole@`7ccb8dd`](https://redirect.github.com/pi-hole/pi-hole/commit/7ccb8ddfb085479fa96e801886eb1cdbeaf3a720) and [pi-hole/FTL@`88c569a`](https://redirect.github.com/pi-hole/FTL/commit/88c569aa026d905d0066135bb71f36a13acf4bf4) **Full Changelog**: <pi-hole/pi-hole@v6.4.1...v6.4.2> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/bigbeartechworld/big-bear-universal-apps). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNDEuMyIsInVwZGF0ZWRJblZlciI6IjQzLjE0MS4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJyZW5vdmF0ZSJdfQ==-->
github-actions Bot
pushed a commit
to bigbeartechworld/big-bear-universal-apps
that referenced
this pull request
Apr 25, 2026
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [jacklul/pihole](https://redirect.github.com/pi-hole/docker-pi-hole) | patch | `2026.04.0` → `2026.04.1` | --- ### Release Notes <details> <summary>pi-hole/docker-pi-hole (jacklul/pihole)</summary> ### [`v2026.04.1`](https://redirect.github.com/pi-hole/docker-pi-hole/releases/tag/2026.04.1) [Compare Source](https://redirect.github.com/pi-hole/docker-pi-hole/compare/2026.04.0...2026.04.1) <!-- Release notes generated using configuration in .github/release.yml at master --> #### What's Changed - docs: update capability documentation links by [@​SirRGB](https://redirect.github.com/SirRGB) in [#​2025](https://redirect.github.com/pi-hole/docker-pi-hole/pull/2025) #### New Contributors - [@​SirRGB](https://redirect.github.com/SirRGB) made their first contribution in [#​2025](https://redirect.github.com/pi-hole/docker-pi-hole/pull/2025) **Full Changelog**: <pi-hole/docker-pi-hole@2026.04.0...2026.04.1> #### New component versions included in this tag: #### What's Changed (FTL v6.6.1) - Add new `GET /api/config/_properties` endpoint by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2356](https://redirect.github.com/pi-hole/FTL/pull/2356) - Fix thread-safety issues causing SIGSEGV under concurrent API load by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2835](https://redirect.github.com/pi-hole/FTL/pull/2835) - fix: fix rare race condition for SHM strings in API handlers by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2833](https://redirect.github.com/pi-hole/FTL/pull/2833) - Accept punycode domains that libidn2 rejects under IDNA2008 by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2838](https://redirect.github.com/pi-hole/FTL/pull/2838) - Improve shutdown diagnostics to identify SIGTERM source by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2839](https://redirect.github.com/pi-hole/FTL/pull/2839) - Resolve empty backtraces when addr2line is not installed by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2831](https://redirect.github.com/pi-hole/FTL/pull/2831) - Improve thread-safety for concurrent API requests by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2847](https://redirect.github.com/pi-hole/FTL/pull/2847) - Don't skip device lookup when resolver.macNames is disabled by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2846](https://redirect.github.com/pi-hole/FTL/pull/2846) - Fix linker error when compiling w/o optimization by [@​aeolio](https://redirect.github.com/aeolio) in [pi-hole/FTL#2850](https://redirect.github.com/pi-hole/FTL/pull/2850) - Clarify `dns.blockESNI` wording by [@​darkexplosiveqwx](https://redirect.github.com/darkexplosiveqwx) in [pi-hole/FTL#2784](https://redirect.github.com/pi-hole/FTL/pull/2784) - Preserve log file path config when fopen fails by [@​DL6ER](https://redirect.github.com/DL6ER) in [pi-hole/FTL#2834](https://redirect.github.com/pi-hole/FTL/pull/2834) #### Security advisories - <GHSA-6w8x-p785-6pm4> - Fixed with : [pi-hole/FTL@`88c569a`](https://redirect.github.com/pi-hole/FTL/commit/88c569aa026d905d0066135bb71f36a13acf4bf4) and [pi-hole/pi-hole@`7ccb8dd`](https://redirect.github.com/pi-hole/pi-hole/commit/7ccb8ddfb085479fa96e801886eb1cdbeaf3a720) - <GHSA-9cqv-839p-gpq2> - Fixed with : [pi-hole/FTL@`0c46e4e`](https://redirect.github.com/pi-hole/FTL/commit/0c46e4ec7fe57f762fce261625f2cf5d43806e6d) #### New Contributors - [@​darkexplosiveqwx](https://redirect.github.com/darkexplosiveqwx) made their first contribution in [pi-hole/FTL#2784](https://redirect.github.com/pi-hole/FTL/pull/2784) **Full Changelog**: <pi-hole/FTL@v6.6...v6.6.1> #### What's Changed (Core v6.4.2) - Wipe version file before creating a new one by [@​yubiuser](https://redirect.github.com/yubiuser) in [pi-hole/pi-hole#6538](https://redirect.github.com/pi-hole/pi-hole/pull/6538) - Fix ownership permissions for containing directories in fix\_owner\_per… by [@​PromoFaux](https://redirect.github.com/PromoFaux) in [pi-hole/pi-hole#6589](https://redirect.github.com/pi-hole/pi-hole/pull/6589) - Remove reference to /usr/local/bin/COL\_TABLE by [@​darkexplosiveqwx](https://redirect.github.com/darkexplosiveqwx) in [pi-hole/pi-hole#6594](https://redirect.github.com/pi-hole/pi-hole/pull/6594) - Skip apt cache update when pihole-meta is current by [@​PromoFaux](https://redirect.github.com/PromoFaux) in [pi-hole/pi-hole#6581](https://redirect.github.com/pi-hole/pi-hole/pull/6581) - Set versions in /etc/pihole/versions to null if script fails by [@​yubiuser](https://redirect.github.com/yubiuser) in [pi-hole/pi-hole#6550](https://redirect.github.com/pi-hole/pi-hole/pull/6550) - Remove redundant touching of logfiles from systemd Service by [@​yubiuser](https://redirect.github.com/yubiuser) in [pi-hole/pi-hole#6601](https://redirect.github.com/pi-hole/pi-hole/pull/6601) - Loosen requirements for local file access for gravity by [@​yubiuser](https://redirect.github.com/yubiuser) in [pi-hole/pi-hole#6430](https://redirect.github.com/pi-hole/pi-hole/pull/6430) - Fix permission for \*.etag files after gravity run by [@​yubiuser](https://redirect.github.com/yubiuser) in [pi-hole/pi-hole#6353](https://redirect.github.com/pi-hole/pi-hole/pull/6353) - add logrotate to DEB and RPM dependencies by [@​darkexplosiveqwx](https://redirect.github.com/darkexplosiveqwx) in [pi-hole/pi-hole#6524](https://redirect.github.com/pi-hole/pi-hole/pull/6524) - Improve gravity error message including curl exit code and errormsg by [@​rdwebdesign](https://redirect.github.com/rdwebdesign) in [pi-hole/pi-hole#6605](https://redirect.github.com/pi-hole/pi-hole/pull/6605) #### Security advisories - <GHSA-6w8x-p785-6pm4> - Fixed with : [pi-hole/pi-hole@`7ccb8dd`](https://redirect.github.com/pi-hole/pi-hole/commit/7ccb8ddfb085479fa96e801886eb1cdbeaf3a720) and [pi-hole/FTL@`88c569a`](https://redirect.github.com/pi-hole/FTL/commit/88c569aa026d905d0066135bb71f36a13acf4bf4) **Full Changelog**: <pi-hole/pi-hole@v6.4.1...v6.4.2> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/bigbeartechworld/big-bear-universal-apps). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNDEuMyIsInVwZGF0ZWRJblZlciI6IjQzLjE0MS4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiLCJyZW5vdmF0ZSJdfQ==-->
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this implement/fix?
Issue #2818 reports FTL terminating cleanly (code 0) after ~15-16 hours of uptime, with the only captured log lines being:
A thorough audit of all paths that can set the global
killedflag confirms there is no internal code path leading to spontaneous termination - every shutdown is either test-mode (pihole-FTL test), adie()/longjmp from dnsmasq, or an external SIGTERM mapped to dnsmasq's EVENT_TERM via SIGUSR6. The "Thread webserver (7) is idle" message is a red herring: the webserver cert-renewal thread sleeps for 24 hours between checks, so it is essentially always cancellable when shutdown begins.The reason the reporter could not diagnose the cause is that the relevant information was either logged at DEBUG level (and therefore invisible) or emitted far above the final termination message (and therefore lost when the log was truncated). This commit closes both gaps so the next occurrence will be diagnosable from a tail of FTL.log alone:
signals.c: persist the SIGTERM sender info ("name (PID, user UID)") into a static buffer in SIGTERM_handler, exposed via get_term_source(). The buffer is sized 256 bytes and only ever read after being written by the signal handler, so no locking is needed.
daemon.c: in cleanup(), re-log the stored SIGTERM source as "Terminated by ..." right before the final "FTL terminated after" banner. Even when the log is truncated to the last few lines, the termination source will now be visible alongside the final message.
main.c: promote the "Shutting down (exit code, jmpret)" log from log_debug to log_info so the entry into the cleanup path is always recorded, not just under DEBUG_ANY.
webserver/webserver.c: split the webserver thread's 24-hour cert-check sleep into 24 x 1-hour sleeps with intermediate
killedchecks. This is a robustness improvement, not a bug fix: the thread is no longer marked as cancellable for 24 hours straight, so the misleading "is idle" log on shutdown happens at most an hour after the last cert check rather than at any point in a 24-hour window.test/test_final.bats: add two regression tests that run after the existing "FTL terminates with message" test:
messages appear in order: Shutting down -> Terminated by ->
FTL terminated after.
After this change, a SIGTERM-triggered shutdown produces:
Related issue or feature (if applicable): N/A
Pull request in docs with documentation (if applicable): N/A
By submitting this pull request, I confirm the following:
git rebase)Checklist:
developmentbranch.