summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/pbd/event_loop.cc24
-rw-r--r--libs/pbd/pbd/abstract_ui.cc6
-rw-r--r--libs/pbd/pbd/event_loop.h10
3 files changed, 17 insertions, 23 deletions
diff --git a/libs/pbd/event_loop.cc b/libs/pbd/event_loop.cc
index e95a938d63..58ab891c4b 100644
--- a/libs/pbd/event_loop.cc
+++ b/libs/pbd/event_loop.cc
@@ -29,21 +29,15 @@ EventLoop::invalidate_request (void* data)
InvalidationRecord* ir = (InvalidationRecord*) data;
if (ir->event_loop) {
- Glib::Mutex::Lock lm (ir->event_loop->slot_invalidation_mutex());
- if (ir->request) {
- cerr << "Object deleted had outstanding event loop request, IR created @ "
- << ir->file << ':' << ir->line
- << endl;
- ir->request->valid = false;
- ir->request->invalidation = 0;
- } else {
- cerr << "No queued request associated with object deletion from "
- << ir->file << ':' << ir->line
- << endl;
-
- }
-
- delete ir;
+ Glib::Mutex::Lock lm (ir->event_loop->slot_invalidation_mutex());
+ for (list<BaseRequestObject*>::iterator i = ir->requests.begin(); i != ir->requests.end(); ++i) {
+ cerr << "Object deleted had outstanding event loop request, IR created @ "
+ << ir->file << ':' << ir->line
+ << endl;
+ (*i)->valid = false;
+ (*i)->invalidation = 0;
+ }
+ delete ir;
}
return 0;
diff --git a/libs/pbd/pbd/abstract_ui.cc b/libs/pbd/pbd/abstract_ui.cc
index 71371fe4d9..a769246f38 100644
--- a/libs/pbd/pbd/abstract_ui.cc
+++ b/libs/pbd/pbd/abstract_ui.cc
@@ -105,7 +105,7 @@ AbstractUI<RequestObject>::handle_ui_requests ()
do_request (vec.buf[0]);
request_buffer_map_lock.lock ();
if (vec.buf[0]->invalidation) {
- vec.buf[0]->invalidation->request = 0;
+ vec.buf[0]->invalidation->requests.remove (vec.buf[0]);
}
i->second->increment_read_ptr (1);
}
@@ -141,7 +141,7 @@ AbstractUI<RequestObject>::handle_ui_requests ()
*/
if (req->invalidation) {
- req->invalidation->request = 0;
+ req->invalidation->requests.remove (req);
}
request_buffer_map_lock.unlock ();
@@ -200,7 +200,7 @@ AbstractUI<RequestObject>::call_slot (InvalidationRecord* invalidation, const bo
req->invalidation = invalidation;
if (invalidation) {
- invalidation->request = req;
+ invalidation->requests.push_back (req);
invalidation->event_loop = this;
}
diff --git a/libs/pbd/pbd/event_loop.h b/libs/pbd/pbd/event_loop.h
index 088b061826..6e7e42e9dd 100644
--- a/libs/pbd/pbd/event_loop.h
+++ b/libs/pbd/pbd/event_loop.h
@@ -40,12 +40,12 @@ class EventLoop
struct BaseRequestObject;
struct InvalidationRecord {
- BaseRequestObject* request;
- PBD::EventLoop* event_loop;
- const char* file;
- int line;
+ std::list<BaseRequestObject*> requests;
+ PBD::EventLoop* event_loop;
+ const char* file;
+ int line;
- InvalidationRecord() : request (0), event_loop (0) {}
+ InvalidationRecord() : event_loop (0) {}
};
static void* invalidate_request (void* data);