The packaged AppDir has an intermittent SIGSEGV during startup, in the window between QGuiApplication construction and the QML engine coming up, with the tokio workers, the audio thread, the loudness analyzer, the visualizer producer and connectivity all running beside it. It hit twice on 2026-09-08 on unrelated commits: the v2.1.0 tag's own release-flatpak attempt 1, which then passed on a re-run of the identical commit, and the #745 bugfix branch. Both left the same evidence - "status -11" and a log that stops mid-startup - which is nothing to act on, and a user who hits this has no re-run to reach for. The process now reports its own death. A handler for SIGSEGV, SIGBUS, SIGILL, SIGFPE and SIGABRT writes the signal, the faulting address, the thread and a backtrace to stderr and flushes the file sink, so the next occurrence names a frame instead of costing another round trip. It runs on a dedicated signal stack so a stack-overflow fault can still report, latches against re-entry, and arms alarm() BEFORE capturing anything: taking a backtrace allocates and takes loader locks, so a fault inside malloc could otherwise deadlock the handler and turn a crash into a hang. The signal is re-raised with the default disposition restored, so the wait status stays the signal and CI, the smoke harness and any core dump still see a crash. The integration test asserts exactly that pair on a child segfaulted on purpose, and it is a named gate in test-crates and its local mirror. qbzd installs it too: a headless daemon that dies of a signal leaves even less behind than the GUI. cc
18 lines
465 B
TOML
18 lines
465 B
TOML
[package]
|
|
name = "qbz-log"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
repository.workspace = true
|
|
description = "Frontend-agnostic logging core for qbz: TeeLogger (stderr+ring+file), write-time secret redaction, and a GitHub-ready diagnostics bundle."
|
|
|
|
[dependencies]
|
|
log = { workspace = true }
|
|
regex = { workspace = true }
|
|
chrono = { workspace = true }
|
|
env_logger = "0.11"
|
|
dirs = "5"
|
|
|
|
[target.'cfg(unix)'.dependencies]
|
|
libc = "0.2"
|