#include "pbd/error.h"
#include "pbd/stacktrace.h"
-#include "i18n.h"
+#include "pbd/i18n.h"
using namespace PBD;
using namespace std;
void*
EventLoop::invalidate_request (void* data)
{
- InvalidationRecord* ir = (InvalidationRecord*) data;
+ InvalidationRecord* ir = (InvalidationRecord*) data;
/* Some of the requests queued with an EventLoop may involve functors
* that make method calls to objects whose lifetime is shorter
* inherit (indirectly) from sigc::trackable.
*/
- if (ir->event_loop) {
- Glib::Threads::Mutex::Lock lm (ir->event_loop->slot_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());
+ 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>
*/
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) {
}
}
+void
+EventLoop::remove_request_buffer_from_map (void* ptr)
+{
+ Glib::Threads::RWLock::WriterLock lm (thread_buffer_requests_lock);
+
+ for (ThreadRequestBufferList::iterator x = thread_buffer_requests.begin(); x != thread_buffer_requests.end(); ++x) {
+ if (x->second.request_buffer == ptr) {
+ thread_buffer_requests.erase (x);
+ break;
+ }
+ }
+}