mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-10 04:22:20 +02:00
Fix access after delete of workspace folders when deleting parent and child
This commit is contained in:
parent
9d2cdadc7a
commit
1eb2b97db7
1 changed files with 26 additions and 4 deletions
|
@ -1798,12 +1798,34 @@ namespace IDE.ui
|
|||
if (mListViewToProjectMap.TryGetValue(projectListViewItem, let projectItem))
|
||||
mProjectToWorkspaceFolderMap.Remove(projectItem);
|
||||
}
|
||||
|
||||
HashSet<void*> deletedFolders = scope .();
|
||||
bool HasDeletedParent(WorkspaceFolder folder)
|
||||
{
|
||||
WorkspaceFolder parent = folder;
|
||||
repeat
|
||||
{
|
||||
parent = parent.mParent;
|
||||
|
||||
if (deletedFolders.Contains(Internal.UnsafeCastToPtr(parent)))
|
||||
return true;
|
||||
}
|
||||
while (parent != null);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
for (let folder in foldersToDelete)
|
||||
{
|
||||
let folderItem = folder.mListView;
|
||||
mListViewToWorkspaceFolderMap.Remove(folderItem);
|
||||
folderItem.mParentItem.RemoveChildItem(folderItem);
|
||||
gApp.mWorkspace.mWorkspaceFolders.Remove(folder);
|
||||
if (!HasDeletedParent(folder))
|
||||
{
|
||||
let folderItem = folder.mListView;
|
||||
mListViewToWorkspaceFolderMap.Remove(folderItem);
|
||||
folderItem.mParentItem.RemoveChildItem(folderItem);
|
||||
}
|
||||
|
||||
gApp.mWorkspace.mWorkspaceFolders.Remove(folder);
|
||||
deletedFolders.Add(Internal.UnsafeCastToPtr(folder));
|
||||
delete folder;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue