From b25ef3ae69b83c78da4d98aba32b19eea0d3aac0 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 20 Apr 2011 01:24:46 +0000 Subject: Fix an assertion failure when stopping the transport with an active controllable touch gesture. git-svn-id: svn://localhost/ardour2/branches/3.0@9389 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/automation_list.cc | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'libs/ardour/automation_list.cc') diff --git a/libs/ardour/automation_list.cc b/libs/ardour/automation_list.cc index b76fa0bb4b..aaab84f2da 100644 --- a/libs/ardour/automation_list.cc +++ b/libs/ardour/automation_list.cc @@ -213,21 +213,30 @@ AutomationList::start_touch (double when) void AutomationList::stop_touch (bool mark, double when) { + if (g_atomic_int_get (&_touching) == 0) { + /* this touch has already been stopped (probably by Automatable::transport_stopped), + so we've nothing to do. + */ + return; + } + g_atomic_int_set (&_touching, 0); if (_state == Touch) { + + assert (!nascent.empty ()); + Glib::Mutex::Lock lm (ControlList::_lock); if (mark) { - nascent.back()->end_time = when; + + nascent.back()->end_time = when; } else { /* nascent info created in start touch but never used. just get rid of it. */ - assert (!nascent.empty ()); - NascentInfo* ninfo = nascent.back (); nascent.erase (nascent.begin()); delete ninfo; -- cgit v1.2.3