mirror of
https://github.com/reactos/reactos.git
synced 2024-08-01 09:01:13 +00:00
Allocate a TLS slot once at process join and treat TlsIndex as an alias to it.
svn path=/trunk/; revision=43120
This commit is contained in:
parent
dacdbb5e50
commit
f0b6797aad
|
@ -251,9 +251,9 @@ typedef BOOL
|
|||
extern HINSTANCE WsDllHandle;
|
||||
extern HANDLE WsSockHeap;
|
||||
extern PWAH_HANDLE_TABLE WsSockHandleTable;
|
||||
extern DWORD TlsIndex;
|
||||
extern PWSPROCESS CurrentWsProcess;
|
||||
extern DWORD GlobalTlsIndex;
|
||||
#define TlsIndex GlobalTlsIndex
|
||||
extern BOOLEAN WsAsyncThreadInitialized;
|
||||
extern PWS_SOCK_POST_ROUTINE WsSockPostRoutine;
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
HANDLE WsSockHeap;
|
||||
HINSTANCE WsDllHandle;
|
||||
DWORD GlobalTlsIndex;
|
||||
DWORD GlobalTlsIndex = TLS_OUT_OF_INDEXES;
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
|
@ -35,7 +35,6 @@ DllMain(HANDLE hModule,
|
|||
switch (dwReason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
|
||||
/* Save DLL Handle */
|
||||
WsDllHandle = hModule;
|
||||
|
||||
|
@ -43,8 +42,14 @@ DllMain(HANDLE hModule,
|
|||
WsSockHeap = GetProcessHeap();
|
||||
|
||||
/* TLS Allocation */
|
||||
GlobalTlsIndex = TlsAlloc();
|
||||
if (GlobalTlsIndex == TLS_OUT_OF_INDEXES) return FALSE;
|
||||
if (GlobalTlsIndex == TLS_OUT_OF_INDEXES)
|
||||
{
|
||||
GlobalTlsIndex = TlsAlloc();
|
||||
if (GlobalTlsIndex == TLS_OUT_OF_INDEXES)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/* Initialize some critical sections */
|
||||
WsCreateStartupSynchronization();
|
||||
|
@ -61,7 +66,6 @@ DllMain(HANDLE hModule,
|
|||
break;
|
||||
|
||||
case DLL_PROCESS_DETACH:
|
||||
|
||||
/* Make sure we were initialized */
|
||||
if (!WsDllHandle) break;
|
||||
|
||||
|
|
|
@ -9,10 +9,6 @@
|
|||
/* INCLUDES ******************************************************************/
|
||||
#include "ws2_32.h"
|
||||
|
||||
/* DATA **********************************************************************/
|
||||
|
||||
DWORD TlsIndex;
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
DWORD
|
||||
|
@ -156,16 +152,7 @@ WsThreadStartup(VOID)
|
|||
INT ErrorCode = WSASYSCALLFAILURE;
|
||||
|
||||
/* Check if we have a valid TLS */
|
||||
if (TlsIndex == TLS_OUT_OF_INDEXES)
|
||||
{
|
||||
/* Set the global one */
|
||||
if ((TlsIndex = GlobalTlsIndex) != TLS_OUT_OF_INDEXES)
|
||||
{
|
||||
/* Success! */
|
||||
ErrorCode = ERROR_SUCCESS;
|
||||
}
|
||||
}
|
||||
else
|
||||
if (TlsIndex != TLS_OUT_OF_INDEXES)
|
||||
{
|
||||
/* TLS was already OK */
|
||||
ErrorCode = ERROR_SUCCESS;
|
||||
|
@ -179,12 +166,6 @@ VOID
|
|||
WSAAPI
|
||||
WsThreadCleanup(VOID)
|
||||
{
|
||||
/* Check if we have a valid TLS */
|
||||
if (TlsIndex != TLS_OUT_OF_INDEXES)
|
||||
{
|
||||
/* We do, invalidate it */
|
||||
TlsIndex = TLS_OUT_OF_INDEXES;
|
||||
}
|
||||
}
|
||||
|
||||
DWORD
|
||||
|
@ -250,6 +231,7 @@ WsThreadDestroyCurrentThread(VOID)
|
|||
{
|
||||
/* Delete it */
|
||||
WsThreadDelete(Thread);
|
||||
TlsSetValue(TlsIndex, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue