mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-16 03:36:32 +01:00
handle deletion of UI objects between the time that a callback is queued with the UI event loop and the execution of the callback (intrusive, big)
git-svn-id: svn://localhost/ardour2/branches/3.0@6807 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
10c257039d
commit
14b0ca31bc
87 changed files with 468 additions and 349 deletions
|
|
@ -1,6 +1,9 @@
|
|||
#include <iostream>
|
||||
#include "pbd/event_loop.h"
|
||||
#include "pbd/stacktrace.h"
|
||||
|
||||
using namespace PBD;
|
||||
using namespace std;
|
||||
|
||||
Glib::StaticPrivate<EventLoop> EventLoop::thread_event_loop;
|
||||
|
||||
|
|
@ -17,3 +20,29 @@ EventLoop::set_event_loop_for_thread (EventLoop* loop)
|
|||
thread_event_loop.set (loop, do_not_delete_the_loop_pointer);
|
||||
}
|
||||
|
||||
void*
|
||||
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;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue