8a: assert_no_alloc on audio-thread callbacks
Wraps the three audio-thread `process` callbacks (`capture_process`, `playback_process`, `tap_process`) with `assert_no_alloc::assert_no_alloc(|| inner(...))`. The `headroom-cli` binary installs `AllocDisabler` as `#[global_allocator]` so any allocation inside one of those blocks during debug builds aborts the process with "memory allocation of N bytes failed". Each callback was renamed to `*_inner` to keep the thin wrapper function pointer stable for pipewire-rs's `process(fn_ptr)`. `assert_no_alloc`'s `disable_release` is on by default — release builds get the system allocator unwrapped and the macros become no-ops, so the audio thread pays zero runtime cost in production. Verified Positive smoke (5 s of 1 kHz sine through processed): daemon stays up across thousands of capture/playback/tap callbacks. No abort. Audio threads are alloc-free as designed. Negative smoke (temporarily inserted `Vec::with_capacity(1024)` inside `capture_process_inner`): daemon aborts (SIGABRT, exit 134) on the first audio callback with the expected "memory allocation of 1024 bytes failed" stderr message — confirming the harness is wired correctly and not silently a no-op. Sanity-check alloc reverted before commit. 185 tests pass; clippy clean at -D warnings --all-targets.
This commit is contained in:
parent
8af6dff98d
commit
9220143db7
6 changed files with 43 additions and 2 deletions
8
Cargo.lock
generated
8
Cargo.lock
generated
|
|
@ -89,6 +89,12 @@ version = "1.0.102"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
|
||||
|
||||
[[package]]
|
||||
name = "assert_no_alloc"
|
||||
version = "1.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "55ca83137a482d61d916ceb1eba52a684f98004f18e0cafea230fe5579c178a3"
|
||||
|
||||
[[package]]
|
||||
name = "autocfg"
|
||||
version = "1.5.0"
|
||||
|
|
@ -633,6 +639,7 @@ checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
|
|||
name = "headroom-cli"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"assert_no_alloc",
|
||||
"clap",
|
||||
"crossbeam-channel",
|
||||
"crossterm",
|
||||
|
|
@ -660,6 +667,7 @@ dependencies = [
|
|||
name = "headroom-core"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"assert_no_alloc",
|
||||
"bytemuck",
|
||||
"criterion",
|
||||
"crossbeam-channel",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue