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::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::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::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::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 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);