mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-11 04:52:21 +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))
|
if (mListViewToProjectMap.TryGetValue(projectListViewItem, let projectItem))
|
||||||
mProjectToWorkspaceFolderMap.Remove(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)
|
for (let folder in foldersToDelete)
|
||||||
{
|
{
|
||||||
let folderItem = folder.mListView;
|
if (!HasDeletedParent(folder))
|
||||||
mListViewToWorkspaceFolderMap.Remove(folderItem);
|
{
|
||||||
folderItem.mParentItem.RemoveChildItem(folderItem);
|
let folderItem = folder.mListView;
|
||||||
gApp.mWorkspace.mWorkspaceFolders.Remove(folder);
|
mListViewToWorkspaceFolderMap.Remove(folderItem);
|
||||||
|
folderItem.mParentItem.RemoveChildItem(folderItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
gApp.mWorkspace.mWorkspaceFolders.Remove(folder);
|
||||||
|
deletedFolders.Add(Internal.UnsafeCastToPtr(folder));
|
||||||
delete folder;
|
delete folder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue