From 455f07d0878723e3dd9edc22475d95566b8d568f Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 14 Feb 2016 02:13:04 +0100 Subject: fix rare livelock in std::map thread_buffer_requests During initial session load it's possible that two threads call PBD::notify_event_loops_about_thread_creation() simultaneously (in particular the process threads). This can lead to an endless loop in stl_tree.h when assigning thread_buffer_requests[key] Now we only have WriteLocks.. unless some better solution comes up a Mutex will do. --- libs/pbd/event_loop.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libs/pbd/event_loop.cc') diff --git a/libs/pbd/event_loop.cc b/libs/pbd/event_loop.cc index 3f5eeb0a75..08f3c2e158 100644 --- a/libs/pbd/event_loop.cc +++ b/libs/pbd/event_loop.cc @@ -147,7 +147,7 @@ EventLoop::pre_register (const string& emitting_thread_name, uint32_t num_reques */ ThreadBufferMapping mapping; - Glib::Threads::RWLock::ReaderLock lm (thread_buffer_requests_lock); + Glib::Threads::RWLock::WriterLock lm (thread_buffer_requests_lock); for (RequestBufferSuppliers::iterator trs = request_buffer_suppliers.begin(); trs != request_buffer_suppliers.end(); ++trs) { -- cgit v1.2.3