Skip to content

OpenRig v0.9.0 — Real-Time Hardening & Emergency Diagnostics

Choose a tag to compare

@dwaugh-edsim dwaugh-edsim released this 25 Jul 23:35

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.