mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-09 12:02:21 +02:00
Fixed project removal crash
This commit is contained in:
parent
0d1fc7e1a5
commit
833b4002a5
2 changed files with 34 additions and 3 deletions
|
@ -873,6 +873,7 @@ BfProject::BfProject()
|
|||
mBuildConfigChanged = false;
|
||||
mSingleModule = false;
|
||||
mAlwaysIncludeAll = false;
|
||||
mDeleteStage = BfProject::DeleteStage_None;
|
||||
mSystem = NULL;
|
||||
mIdx = -1;
|
||||
}
|
||||
|
@ -3188,13 +3189,32 @@ void BfSystem::RemoveOldData()
|
|||
{
|
||||
{
|
||||
AutoCrit autoCrit(mDataLock);
|
||||
|
||||
for (auto typeDef : mTypeDefDeleteQueue)
|
||||
delete typeDef;
|
||||
mTypeDefDeleteQueue.Clear();
|
||||
|
||||
|
||||
if (!mProjectDeleteQueue.IsEmpty())
|
||||
{
|
||||
for (auto project : mProjectDeleteQueue)
|
||||
project->mDeleteStage = BfProject::DeleteStage_AwaitingRefs;
|
||||
|
||||
for (auto typeDef : mTypeDefs)
|
||||
if (typeDef->mProject->mDeleteStage == BfProject::DeleteStage_AwaitingRefs)
|
||||
typeDef->mProject->mDeleteStage = BfProject::DeleteStage_Queued;
|
||||
|
||||
for (int projectIdx = 0; projectIdx < (int)mProjectDeleteQueue.size(); projectIdx++)
|
||||
{
|
||||
auto project = mProjectDeleteQueue[projectIdx];
|
||||
if (project->mDeleteStage == BfProject::DeleteStage_AwaitingRefs)
|
||||
{
|
||||
mProjectDeleteQueue.RemoveAtFast(projectIdx);
|
||||
delete project;
|
||||
mProjectDeleteQueue.Clear();
|
||||
projectIdx--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RemoveOldParsers();
|
||||
|
@ -3642,6 +3662,8 @@ BF_EXPORT void BF_CALLTYPE BfProject_Delete(BfProject* bfProject)
|
|||
{
|
||||
auto bfSystem = bfProject->mSystem;
|
||||
AutoCrit autoCrit(bfSystem->mSystemLock);
|
||||
bfProject->mDeleteStage = BfProject::DeleteStage_Queued;
|
||||
|
||||
bfSystem->mProjectDeleteQueue.push_back(bfProject);
|
||||
|
||||
BF_ASSERT(bfSystem->mProjects[bfProject->mIdx] == bfProject);
|
||||
|
|
|
@ -1034,6 +1034,14 @@ enum BfProjectFlags
|
|||
|
||||
class BfProject
|
||||
{
|
||||
public:
|
||||
enum DeleteStage
|
||||
{
|
||||
DeleteStage_None,
|
||||
DeleteStage_Queued,
|
||||
DeleteStage_AwaitingRefs,
|
||||
};
|
||||
|
||||
public:
|
||||
BfSystem* mSystem;
|
||||
String mName;
|
||||
|
@ -1043,6 +1051,7 @@ public:
|
|||
bool mDisabled;
|
||||
bool mSingleModule;
|
||||
bool mAlwaysIncludeAll;
|
||||
DeleteStage mDeleteStage;
|
||||
int mIdx;
|
||||
|
||||
String mStartupObject;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue