1
0
Fork 0
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:
Brian Fiete 2020-05-19 09:07:34 -07:00
parent 0d1fc7e1a5
commit 833b4002a5
2 changed files with 34 additions and 3 deletions

View file

@ -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();
for (auto project : mProjectDeleteQueue)
delete project;
mProjectDeleteQueue.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;
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);

View file

@ -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;