13
0

Delete cross-thread pools when the thread terminates if they are empty. Hopefully fixes #3094.

git-svn-id: svn://localhost/ardour2/branches/3.0@7022 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Carl Hetherington 2010-04-29 22:55:27 +00:00
parent 09f856c1a1
commit d57a472c16

View File

@ -157,7 +157,18 @@ free_per_thread_pool (void* ptr)
CrossThreadPool* cp = static_cast<CrossThreadPool*> (ptr); CrossThreadPool* cp = static_cast<CrossThreadPool*> (ptr);
assert (cp); assert (cp);
cp->parent()->add_to_trash (cp); if (cp->empty()) {
/* This CrossThreadPool is already empty, and the thread is finishing so nothing
* more can be added to it. We can just delete the pool.
*/
delete cp;
} else {
/* This CrossThreadPool is not empty, meaning that there's some Events in it
* which another thread may yet read, so we can't delete the pool just yet.
* Put it in the trash and hope someone deals with it at some stage.
*/
cp->parent()->add_to_trash (cp);
}
} }
PerThreadPool::PerThreadPool () PerThreadPool::PerThreadPool ()