diff options
Diffstat (limited to 'libs/ardour/automation_list.cc')
-rw-r--r-- | libs/ardour/automation_list.cc | 15 |
1 files changed, 12 insertions, 3 deletions
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; |