diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h index 40753d12b3..20cb171552 100644 --- a/libs/ardour/ardour/playlist.h +++ b/libs/ardour/ardour/playlist.h @@ -426,7 +426,7 @@ protected: void ripple_locked (timepos_t const & at, timecnt_t const & distance, RegionList *exclude); void ripple_unlocked (timepos_t const & at, timecnt_t const & distance, RegionList *exclude, ThawList& thawlist, bool notify = true); - virtual void region_going_away (std::weak_ptr /*region*/) {} + virtual void region_going_away (std::weak_ptr /*region*/); virtual XMLNode& state (bool) const; diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc index b9076afe0a..082ea87d5f 100644 --- a/libs/ardour/playlist.cc +++ b/libs/ardour/playlist.cc @@ -662,6 +662,29 @@ Playlist::clear_pending () pending_layering = false; } +void +Playlist::region_going_away (std::weak_ptr region) +{ + if (_session.deletion_in_progress ()) { + return; + } + /* Before a region can be destroyed it must already + * be removed from all playlists. + */ +#ifndef NDEBUG + std::shared_ptr r = region.lock(); + if (!r) { + return; + } + assert (find_region (r->id ())); + { + RegionReadLock rlock (this); + assert (all_regions.find (r) != all_regions.end()); + } +#endif + //remove_region (r); +} + /************************************************************* * PLAYLIST OPERATIONS *************************************************************/