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;
|
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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue