summaryrefslogtreecommitdiff
path: root/libs/pbd/pbd/abstract_ui.h
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-12-14 13:42:45 +0100
committerRobin Gareus <robin@gareus.org>2016-12-14 13:43:20 +0100
commit7a1ff7ce8f9bf21ec3364fd82cbb5c52789da5cd (patch)
tree6689a0183cac505aea4bc98fe59319a5a30b0736 /libs/pbd/pbd/abstract_ui.h
parent9e4b972286c5aa9b161afd09b58635eaa4973c40 (diff)
rework locking (fa07233a, 112fba182)
For now: use a single lock, which should fix all related crashes. optimize (with less contended partial locks) if this works.
Diffstat (limited to 'libs/pbd/pbd/abstract_ui.h')
-rw-r--r--libs/pbd/pbd/abstract_ui.h19
1 files changed, 8 insertions, 11 deletions
diff --git a/libs/pbd/pbd/abstract_ui.h b/libs/pbd/pbd/abstract_ui.h
index e23f443c25..072de9b4c9 100644
--- a/libs/pbd/pbd/abstract_ui.h
+++ b/libs/pbd/pbd/abstract_ui.h
@@ -54,27 +54,25 @@ class Touchable;
template<typename RequestObject>
class ABSTRACT_UI_API AbstractUI : public BaseUI
{
- public:
+public:
AbstractUI (const std::string& name);
virtual ~AbstractUI() {}
void register_thread (pthread_t, std::string, uint32_t num_requests);
void call_slot (EventLoop::InvalidationRecord*, const boost::function<void()>&);
Glib::Threads::Mutex& slot_invalidation_mutex() { return request_buffer_map_lock; }
- Glib::Threads::Mutex& request_invalidation_mutex() { return request_invalidation_lock; }
Glib::Threads::Mutex request_buffer_map_lock;
- Glib::Threads::Mutex request_invalidation_lock;
static void* request_buffer_factory (uint32_t num_requests);
- protected:
+protected:
struct RequestBuffer : public PBD::RingBufferNPT<RequestObject> {
- bool dead;
- RequestBuffer (uint32_t size)
- : PBD::RingBufferNPT<RequestObject> (size)
- , dead (false) {}
- };
+ bool dead;
+ RequestBuffer (uint32_t size)
+ : PBD::RingBufferNPT<RequestObject> (size)
+ , dead (false) {}
+ };
typedef typename RequestBuffer::rw_vector RequestBufferVector;
#if defined(COMPILER_MINGW) && defined(PTW32_VERSION)
@@ -93,9 +91,8 @@ class ABSTRACT_UI_API AbstractUI : public BaseUI
#endif
RequestBufferMap request_buffers;
- static Glib::Threads::Private<RequestBuffer> per_thread_request_buffer;
+ static Glib::Threads::Private<RequestBuffer> per_thread_request_buffer;
- Glib::Threads::Mutex request_list_lock;
std::list<RequestObject*> request_list;
RequestObject* get_request (RequestType);