1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-07-04 15:26:00 +02:00

Working on installer, fixing more Win32 issues

Throwing error on member references with ".." cascade token outside invocations (ie: "ts..mA = 123")
Fixed 'Thread.ModuleTLSIndex' error - which caused us TLS lookup failures in Beef DLLs
Fixed some hotswap errors
Made BeefPerf shut down properly
Fixed an 'int literal' FixIntUnknown issue where rhs was System.Object which caused an illegal boxing
Fixed COFF::LocateSymbol issues with Win32 and also with linking to static libraries - showed up with hot-linking in fmod when hot-adding a floating point mod
Fixed a couple memory leaks
Fixed alignment issue in COFF::ParseCompileUnit
This commit is contained in:
Brian Fiete 2019-09-02 17:39:47 -07:00
parent aad0a640c5
commit b63a243fd7
73 changed files with 2474 additions and 293 deletions

View file

@ -31,6 +31,25 @@ USING_NS_BF;
#define BP_ABI_VERSION 2
BpManager* BpManager::sBpManager = NULL;
static bool gOwnsBpManager = false;
static BpThreadInfo sFakeThreadInfo;
struct BpManagerOwner
{
BpManager* mOwnedManager;
bool mDidShutdown;
BpManagerOwner()
{
mOwnedManager = NULL;
mDidShutdown = false;
}
~BpManagerOwner()
{
mDidShutdown = true;
delete mOwnedManager;
}
};
static BpManagerOwner gBpManagerOwner;
BF_TLS_DECLSPEC BpThreadInfo* Beefy::BpManager::sBpThreadInfo;
@ -314,7 +333,7 @@ const char* BpCmdTarget::ToStrPtr(const char* str)
return str;
}
#define BPCMD_PREPARE if (!BpManager::Get()->mCollectData) return; AutoCrit autoCrit(mCritSect)
#define BPCMD_PREPARE if ((gBpManagerOwner.mDidShutdown) || (!BpManager::Get()->mCollectData)) return; AutoCrit autoCrit(mCritSect)
#define GET_FROM(ptr, T) *((T*)(ptr += sizeof(T)) - 1)
@ -1527,6 +1546,8 @@ BpThreadInfo* BpManager::GetCurThreadInfo()
BpThreadInfo* threadInfo = sBpThreadInfo;
if (threadInfo == NULL)
{
if (gBpManagerOwner.mDidShutdown)
return &sFakeThreadInfo;
threadInfo = Get()->SlowGetCurThreadInfo();
sBpThreadInfo = threadInfo;
}
@ -1581,13 +1602,14 @@ BpManager* BpManager::Get()
BpSharedMemory* sharedMem = (BpSharedMemory*)MapViewOfFile(fileMapping, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(BpSharedMemory));
if (sharedMem != NULL)
{
sBpManager = new BpManager();
sBpManager = new BpManager();
sBpManager->mMutex = mutex;
sBpManager->mSharedMemoryFile = sharedMem;
sBpManager->mSharedMemoryFile = fileMapping;
sharedMem->mBpManager = sBpManager;
sharedMem->mABIVersion = BP_ABI_VERSION;
::UnmapViewOfFile(sharedMem);
::ReleaseMutex(mutex);
gBpManagerOwner.mOwnedManager = sBpManager;
}
else
{
@ -1609,6 +1631,7 @@ BpManager* BpManager::Get()
if (sBpManager == NULL)
{
sBpManager = new BpManager();
gBpManagerOwner.mOwnedManager = sBpManager;
}
return sBpManager;
}