diff options
Diffstat (limited to 'libs/ardour/ardour/rt_midibuffer.h')
-rw-r--r-- | libs/ardour/ardour/rt_midibuffer.h | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/libs/ardour/ardour/rt_midibuffer.h b/libs/ardour/ardour/rt_midibuffer.h index 5bb12afef9..ff17fd66e2 100644 --- a/libs/ardour/ardour/rt_midibuffer.h +++ b/libs/ardour/ardour/rt_midibuffer.h @@ -63,6 +63,7 @@ class LIBARDOUR_API RTMidiBuffer : public Evoral::EventSink<samplepos_t> }; private: + friend struct WriteProtectRender; struct Blob { uint32_t size; @@ -85,7 +86,17 @@ class LIBARDOUR_API RTMidiBuffer : public Evoral::EventSink<samplepos_t> uint32_t _pool_capacity; uint8_t* _pool; - mutable Glib::Threads::RWLock _lock; + Glib::Threads::RWLock _lock; + + public: + class WriteProtectRender { + public: + WriteProtectRender (RTMidiBuffer& rtm) : lm (rtm._lock, Glib::Threads::NOT_LOCK) {} + void acquire () { lm.acquire(); } + + private: + Glib::Threads::RWLock::WriterLock lm; + }; }; } // namespace ARDOUR |