mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-07 23:35:03 +01:00
Fix mem-leak, Playlist/Region SessionHandleRef
When a playlist is deleted and drops_references(), any undo/redo StatefulDiffCommand referncing playlist invoke Destructible::drop_references() of the Command. This leads to command_death(). As opposed to UndoTransaction::clear() the StatefulDiffCommand was not destroyed. In case of playlists StatefulDiffCommand::_changes contains PBD::SequenceProperty<std::list<boost::shared_ptr<Region> > > and shared pointer reference of the playlist regions were kept indefinitely. This fixes the following scenario: New session, import an file, delete the created track, clean up unused sources (delete unused playlists)[, quit]. A reference to the imported region was kept, because of the playlist's undo command (insert region). Yet the source file was deleted. PS. Most playlist changes are accompanied by GUI zoom/selection MementoCommands. Those are currently never directly dropped. command_death() leaves those in place.
This commit is contained in:
parent
aa3f7f2414
commit
9e6435ff14
1 changed files with 6 additions and 1 deletions
|
|
@ -93,7 +93,12 @@ UndoTransaction::add_command (Command* const cmd)
|
||||||
void
|
void
|
||||||
UndoTransaction::remove_command (Command* const action)
|
UndoTransaction::remove_command (Command* const action)
|
||||||
{
|
{
|
||||||
actions.remove (action);
|
list<Command*>::iterator i =std::find (actions.begin (), actions.end (), action);
|
||||||
|
if (i == actions.end ()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
actions.erase (i);
|
||||||
|
delete action;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue