release locks before deleting record
authorRobin Gareus <robin@gareus.org>
Wed, 14 Dec 2016 01:25:13 +0000 (02:25 +0100)
committerRobin Gareus <robin@gareus.org>
Wed, 14 Dec 2016 01:25:13 +0000 (02:25 +0100)
libs/pbd/event_loop.cc

index fbbf9c83aab4f15b449ec7c4089080bb1bb4acd7..d3aaa3c672c125cd47a303e034dff8393f77a5fa 100644 (file)
@@ -86,17 +86,20 @@ EventLoop::invalidate_request (void* data)
         * inherit (indirectly) from sigc::trackable.
         */
 
-        if (ir->event_loop) {
-               Glib::Threads::Mutex::Lock lm (ir->event_loop->slot_invalidation_mutex());
-               Glib::Threads::Mutex::Lock lr (ir->event_loop->request_invalidation_mutex());
-               for (list<BaseRequestObject*>::iterator i = ir->requests.begin(); i != ir->requests.end(); ++i) {
-                       (*i)->valid = false;
-                       (*i)->invalidation = 0;
+       if (ir->event_loop) {
+               {
+                       Glib::Threads::Mutex::Lock lm (ir->event_loop->slot_invalidation_mutex());
+                       Glib::Threads::Mutex::Lock lr (ir->event_loop->request_invalidation_mutex());
+                       for (list<BaseRequestObject*>::iterator i = ir->requests.begin(); i != ir->requests.end(); ++i) {
+                               (*i)->valid = false;
+                               (*i)->invalidation = 0;
+                       }
                }
+               // should this not always be deleted, regardless if there's an event_loop?
                delete ir;
-        }
+       }
 
-        return 0;
+       return 0;
 }
 
 vector<EventLoop::ThreadBufferMapping>