glslang tear down: Include deleting the keyword map in tear down. From johnk and sawato shusaku (shusaku.sawato@dmprof.com).

git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@31115 e7fa87d3-cd2b-0410-9028-fcbf551c1848
This commit is contained in:
John Kessenich 2015-05-08 02:28:33 +00:00
parent 6add20a835
commit f75276ba5c
4 changed files with 35 additions and 23 deletions

View File

@ -50,13 +50,13 @@ bool InitProcess()
glslang::GetGlobalLock(); glslang::GetGlobalLock();
if (ThreadInitializeIndex != OS_INVALID_TLS_INDEX) { if (ThreadInitializeIndex != OS_INVALID_TLS_INDEX) {
// //
// Function is re-entrant. // Function is re-entrant.
// //
glslang::ReleaseGlobalLock(); glslang::ReleaseGlobalLock();
return true; return true;
} }
ThreadInitializeIndex = OS_AllocTLSIndex(); ThreadInitializeIndex = OS_AllocTLSIndex();
@ -65,16 +65,16 @@ bool InitProcess()
glslang::ReleaseGlobalLock(); glslang::ReleaseGlobalLock();
return false; return false;
} }
if (! InitializePoolIndex()) { if (! InitializePoolIndex()) {
assert(0 && "InitProcess(): Failed to initialize global pool"); assert(0 && "InitProcess(): Failed to initialize global pool");
glslang::ReleaseGlobalLock(); glslang::ReleaseGlobalLock();
return false; return false;
} }
InitThread(); InitThread();
glslang::ReleaseGlobalLock(); glslang::ReleaseGlobalLock();
return true; return true;
@ -83,23 +83,23 @@ bool InitProcess()
bool InitThread() bool InitThread()
{ {
// //
// This function is re-entrant // This function is re-entrant
// //
if (ThreadInitializeIndex == OS_INVALID_TLS_INDEX) { if (ThreadInitializeIndex == OS_INVALID_TLS_INDEX) {
assert(0 && "InitThread(): Process hasn't been initalised."); assert(0 && "InitThread(): Process hasn't been initalised.");
return false; return false;
} }
if (OS_GetTLSValue(ThreadInitializeIndex) != 0) if (OS_GetTLSValue(ThreadInitializeIndex) != 0)
return true; return true;
InitializeMemoryPools(); InitializeMemoryPools();
if (! OS_SetTLSValue(ThreadInitializeIndex, (void *)1)) { if (! OS_SetTLSValue(ThreadInitializeIndex, (void *)1)) {
assert(0 && "InitThread(): Unable to set init flag."); assert(0 && "InitThread(): Unable to set init flag.");
return false; return false;
} }
return true; return true;
} }
@ -112,18 +112,18 @@ bool DetachThread()
if (ThreadInitializeIndex == OS_INVALID_TLS_INDEX) if (ThreadInitializeIndex == OS_INVALID_TLS_INDEX)
return true; return true;
// //
// Function is re-entrant and this thread may not have been initalised. // Function is re-entrant and this thread may not have been initialized.
// //
if (OS_GetTLSValue(ThreadInitializeIndex) != 0) { if (OS_GetTLSValue(ThreadInitializeIndex) != 0) {
if (!OS_SetTLSValue(ThreadInitializeIndex, (void *)0)) { if (!OS_SetTLSValue(ThreadInitializeIndex, (void *)0)) {
assert(0 && "DetachThread(): Unable to clear init flag."); assert(0 && "DetachThread(): Unable to clear init flag.");
success = false; success = false;
} }
FreeGlobalPools(); FreeGlobalPools();
} }
return success; return success;
} }
@ -139,7 +139,7 @@ bool DetachProcess()
success = DetachThread(); success = DetachThread();
FreePoolIndex(); FreePoolIndex();
OS_FreeTLSIndex(ThreadInitializeIndex); OS_FreeTLSIndex(ThreadInitializeIndex);
ThreadInitializeIndex = OS_INVALID_TLS_INDEX; ThreadInitializeIndex = OS_INVALID_TLS_INDEX;

View File

@ -514,6 +514,14 @@ void TScanContext::fillInKeywordMap()
ReservedSet->insert("using"); ReservedSet->insert("using");
} }
void TScanContext::deleteKeywordMap()
{
delete KeywordMap;
KeywordMap = 0;
delete ReservedSet;
ReservedSet = 0;
}
int TScanContext::tokenize(TPpContext* pp, TParserToken& token) int TScanContext::tokenize(TPpContext* pp, TParserToken& token)
{ {
do { do {

View File

@ -52,6 +52,8 @@ public:
virtual ~TScanContext() { } virtual ~TScanContext() { }
static void fillInKeywordMap(); static void fillInKeywordMap();
static void deleteKeywordMap();
int tokenize(TPpContext*, TParserToken&); int tokenize(TPpContext*, TParserToken&);
protected: protected:

View File

@ -668,6 +668,8 @@ int __fastcall ShFinalize()
PerProcessGPA = 0; PerProcessGPA = 0;
} }
glslang::TScanContext::deleteKeywordMap();
return 1; return 1;
} }