From Mathias Froehlich, "Tha attached change adapt previous attemps to get our application using osg

through microsofts application verifier. The current change should work a
little better ...
The change is based on rev 10605."
This commit is contained in:
Robert Osfield 2009-10-10 11:00:35 +00:00
parent 972e68113d
commit 058d31d7b5
2 changed files with 9 additions and 3 deletions

View File

@ -205,7 +205,10 @@ namespace OpenThreads {
Thread* Thread::CurrentThread()
{
return (Thread* )TlsGetValue(Win32ThreadPrivateData::TLS.getId());
DWORD ID = Win32ThreadPrivateData::TLS.getId();
if (ID == TLS_OUT_OF_INDEXES)
return 0;
return (Thread* )TlsGetValue(ID);
}
//----------------------------------------------------------------------------

View File

@ -71,18 +71,21 @@ public:
struct TlsHolder{ // thread local storage slot
DWORD getId()
{
static bool initialized = false;
if (!initialized) {
ID = TlsAlloc();
initialized = true;
}
return ID;
}
TlsHolder() : ID(TLS_OUT_OF_INDEXES), initialized(false) {}
~TlsHolder(){
TlsFree(ID);
if (initialized)
TlsFree(ID);
ID = TLS_OUT_OF_INDEXES;
}
private:
DWORD ID;
bool initialized;
};
static TlsHolder TLS;