summaryrefslogtreecommitdiff
path: root/libs/pbd/pool.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2010-04-14 23:58:20 +0000
committerCarl Hetherington <carl@carlh.net>2010-04-14 23:58:20 +0000
commit84e92060fd0593adcd47c39b358048715ece9c7a (patch)
treece22806736ff7f7fc5f47dfd029f9d8a2b758a13 /libs/pbd/pool.cc
parent7939dd9399e8e86b579bbddeba73d997ec6cf1b7 (diff)
Prevent crash in pool destruction during session teardown.
git-svn-id: svn://localhost/ardour2/branches/3.0@6905 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/pbd/pool.cc')
-rw-r--r--libs/pbd/pool.cc10
1 files changed, 9 insertions, 1 deletions
diff --git a/libs/pbd/pool.cc b/libs/pbd/pool.cc
index 7859408c45..abb8695c23 100644
--- a/libs/pbd/pool.cc
+++ b/libs/pbd/pool.cc
@@ -198,10 +198,19 @@ PerThreadPool::per_thread_pool ()
return p;
}
+void
+PerThreadPool::set_trash (RingBuffer<CrossThreadPool*>* t)
+{
+ Glib::Mutex::Lock lm (_trash_mutex);
+ _trash = t;
+}
+
/** Add a CrossThreadPool to our trash, if we have one. If not, a warning is emitted. */
void
PerThreadPool::add_to_trash (CrossThreadPool* p)
{
+ Glib::Mutex::Lock lm (_trash_mutex);
+
if (!_trash) {
warning << "Pool " << p->name() << " has no trash collector; a memory leak has therefore occurred" << endmsg;
return;
@@ -211,7 +220,6 @@ PerThreadPool::add_to_trash (CrossThreadPool* p)
can only be one writer to the _trash RingBuffer)
*/
- Glib::Mutex::Lock lm (_trash_write_mutex);
_trash->write (&p, 1);
}