✨ New Features
cpworker: Live Config Reload
Reload configuration without restarting the process.
- Triggered via the SIGHUP signal or the reload_config command over the unix socket
- A dedicated reload thread communicates with the main thread through a mailbox protocol (START / REUSED / EXCHANGE / DESTROY / DONE)
- Tasks match identity across reloads via a fingerprint field, so unchanged tasks are reused without interrupting capture
- New reload integration tests (reload_test.go, reload_support_test.go) covering task reuse, destination switching, and rebuild scenarios
cpworker: Pipeline Execution Model
A new optional pipelined execution model, alongside the default RTC (run-to-completion) model.
- New execution_model config option (rtc | pipeline, default rtc)
- New pipeline.buffer_size_mb to configure the pipeline buffer size
- Backed by an SPSC ring buffer (ring_buffer.c, with mempool)
- Documentation updated in docs/USAGE-CPWORKER.md and the Chinese version
🐛 Bug Fixes
cpdaemon: cgroup CPU limit management
- Removing a CPU limit on a running worker failed: previously rmdir-ing a running worker's cgroup returned EBUSY because the worker was still a member of the group. The handle is now split into Reset (clear the quota to unlimited — safe on a live worker) and Cleanup (rmdir only after the worker exits). Added SetV1CpuUnlimited / SetV2CpuUnlimited helpers and cgroup tests.
- Auto-detect cgroup version: cpdaemon now automatically detects and adapts to the host's cgroup v1 / v2.
Full Changelog: v0.9.3...v0.9.4