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; mBuildConfigChanged = false;
mSingleModule = false; mSingleModule = false;
mAlwaysIncludeAll = false; mAlwaysIncludeAll = false;
mDeleteStage = BfProject::DeleteStage_None;
mSystem = NULL; mSystem = NULL;
mIdx = -1; mIdx = -1;
} }
@ -3188,13 +3189,32 @@ void BfSystem::RemoveOldData()
{ {
{ {
AutoCrit autoCrit(mDataLock); AutoCrit autoCrit(mDataLock);
for (auto typeDef : mTypeDefDeleteQueue) for (auto typeDef : mTypeDefDeleteQueue)
delete typeDef; delete typeDef;
mTypeDefDeleteQueue.Clear(); mTypeDefDeleteQueue.Clear();
if (!mProjectDeleteQueue.IsEmpty())
{
for (auto project : mProjectDeleteQueue) 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; delete project;
mProjectDeleteQueue.Clear(); projectIdx--;
}
}
}
} }
RemoveOldParsers(); RemoveOldParsers();
@ -3642,6 +3662,8 @@ BF_EXPORT void BF_CALLTYPE BfProject_Delete(BfProject* bfProject)
{ {
auto bfSystem = bfProject->mSystem; auto bfSystem = bfProject->mSystem;
AutoCrit autoCrit(bfSystem->mSystemLock); AutoCrit autoCrit(bfSystem->mSystemLock);
bfProject->mDeleteStage = BfProject::DeleteStage_Queued;
bfSystem->mProjectDeleteQueue.push_back(bfProject); bfSystem->mProjectDeleteQueue.push_back(bfProject);
BF_ASSERT(bfSystem->mProjects[bfProject->mIdx] == bfProject); BF_ASSERT(bfSystem->mProjects[bfProject->mIdx] == bfProject);

View file

@ -1034,6 +1034,14 @@ enum BfProjectFlags
class BfProject class BfProject
{ {
public:
enum DeleteStage
{
DeleteStage_None,
DeleteStage_Queued,
DeleteStage_AwaitingRefs,
};
public: public:
BfSystem* mSystem; BfSystem* mSystem;
String mName; String mName;
@ -1043,6 +1051,7 @@ public:
bool mDisabled; bool mDisabled;
bool mSingleModule; bool mSingleModule;
bool mAlwaysIncludeAll; bool mAlwaysIncludeAll;
DeleteStage mDeleteStage;
int mIdx; int mIdx;
String mStartupObject; String mStartupObject;