Hi there ! first off, a
huge thank you for what you do!
@Exeldro
I see there are some other issues with the Aitum Vertical plugin, but right now, it’s the only one that really gets it right... the vertical smartphone format is clearly driving this trend, so platforms are following suit, and streamers are too.
I experienced crashes due to an audio memory address issue.
Edit: I should point out that the crash occurs after several hours of streaming on average, 5 or even 7 hours in.
I used Gemini to help me out:
Title: Crash (0xC0000005) in move_enum_active_sources when running alongside Aitum Vertical Canvas
Description
An access violation crash (0xC0000005) occurs on the audio-io thread during concurrent source enumeration. This issue appears when using
Move Transition together with
Aitum Vertical Canvas, especially in setups featuring nested scenes or shared audio sources.
Crash Context
- Thread: audio-io
- Exception Code: 0xC0000005 (Access Violation)
- Faulting Modules: move-transition.dll / vertical-canvas.dll
- Relevant Call Stack:
- move-transition.dll!move_enum_active_sources
- vertical-canvas.dll!audio_wrapper_enum_all_sources
Suspected Root Cause
A race condition occurs when move_enum_active_sources traverses the active source tree while Aitum's audio wrapper simultaneously enumerates/modifies sources across canvases. Move attempts to read a source pointer that has become invalid or unmapped during the iteration without proper mutex locking or ref-counting.
Suggested Fix
- Add explicit null-checks and status guards before inspecting sources (e.g., `if (!source || obs_source_removed(source)) continue;`).
- Protect source lifecycles during iteration using `libobs` reference counting: call `obs_source_addref()` (or `obs_source_get_ref()`) before dereferencing, and `obs_source_release()` once processing is done.
- Guard the tree traversal in `move_enum_active_sources` with scene/source mutex locks or safer enumeration callbacks to prevent data races with third-party audio wrappers like Aitum on the `audio-io` thread.