OpenRig v0.9.0 — Real-Time Hardening & Emergency Diagnostics
OpenRig v0.9.0 — Real-Time Hardening, MP3 Engine Fixes & Industrial-Grade Crash Diagnostics
This release focuses on live gig reliability, audio-thread safety, MP3 player fixes, and an upgraded zero-heap crash diagnostic suite.
Real-Time Audio Engine & Plugin Hardening
- Thread-Safe Plugin Swapping: Wrapped VST3 execution in RackSlot and OpenRigEngine with non-blocking spinlocks (juce::SpinLock::ScopedTryLockType). Deferred plugin resource release and destruction to the Message thread after lock release to eliminate SEH access violations during live song/rig transitions.
- Wait-Free MIDI CC Parameter Mapping: Cached AudioProcessorParameter* pointers directly in CCMapping structures. Eliminates heap allocations and RTTI (dynamic_cast) on the audio thread during incoming MIDI CC messages.
- ASIO Underrun Protection: Reduced the audio-thread spin-wait barrier (kMaxSpins) from 50,000,000 to 50,000 spins (<1ms), keeping callback execution strictly within ASIO deadlines (2.9ms at 128 samples / 44.1kHz).
- Convolution Reverb Sub-Block Sizing: Corrected wet-block buffer sizing in ConvolutionReverb::processBlock (.getSubBlock(0, (size_t)n)), preventing buffer overruns when IR cabinet/room simulatioz:\davecore\Builds\VisualStudio2026\x64\Release\App\OpenRig.exe
- ns are active.
- Sampler Processor Safety: Converted sample configuration locks to non-blocking spinlocks, preventing audio-thread stalls during sample editing.
- Pre-Allocated Audio Buffers: Pre-allocated scratchBuffer in RackSlot::prepare to 8,192 samples to ensure zero audio-thread memory allocations.
MP3 Player Engine Overhaul
- Clean Stop & Restart: Fixed an issue where stopping playback from a playlist prevented restarting. stop() now cleanly resets sample read position to zero.
- Lock-Free Transport Reporting: Converted position and duration tracking metrics to atomic variables (currentReadPos, totalReadLength), removing UI lock contention.
- Playlist Row Highlight: Clicking play now respects and triggers playback for the currently highlighted playlist selection.
Zero-Heap Crash Diagnostics & Flight Recorder Ring Buffer
- Zero-Heap Emergency Report Writer: Crash reports are written using raw Win32 APIs (CreateFileW/WriteFile) into pre-allocated stack buffers, guaranteeing dumps survive heap corruption or contended locks.
- Minidumps Saved Off OneDrive: Minidumps and reports are saved to timestamped files at %APPDATA%\OpenRig\Crashes\OpenRig_YYYYMMDD_HHMMSS.{dmp,txt} to avoid OneDrive lock conflicts and file overwrites (with a link to the latest dump copied to Desktop).
- Lock-Free Flight Recorder: Captures the last 256 real-time events (MIDI, plugin actions, slot swaps, thread IDs) in a lock-free ring buffer and flushes them directly into the crash report.
- Vectored Exception Handling (VEH) & CRT Catching: Intercepts first-chance exceptions, pure-virtual calls, and CRT invalid parameter aborts via AddVectoredExceptionHandler(1, ...) before third-party plugin handlers can swallow them.
- Rich Multi-Thread Minidumps: Minidumps include MiniDumpWithThreadInfo, MiniDumpWithUnloadedModules, MiniDumpWithHandleData, MiniDumpWithIndirectlyReferencedMemory, and MiniDumpWithDataSegs for complete multi-thread callstack symbolication.