mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 10:05:59 +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
3 changed files with 12 additions and 26 deletions
|
@ -251,9 +251,9 @@ typedef BOOL
|
||||||
extern HINSTANCE WsDllHandle;
|
extern HINSTANCE WsDllHandle;
|
||||||
extern HANDLE WsSockHeap;
|
extern HANDLE WsSockHeap;
|
||||||
extern PWAH_HANDLE_TABLE WsSockHandleTable;
|
extern PWAH_HANDLE_TABLE WsSockHandleTable;
|
||||||
extern DWORD TlsIndex;
|
|
||||||
extern PWSPROCESS CurrentWsProcess;
|
extern PWSPROCESS CurrentWsProcess;
|
||||||
extern DWORD GlobalTlsIndex;
|
extern DWORD GlobalTlsIndex;
|
||||||
|
#define TlsIndex GlobalTlsIndex
|
||||||
extern BOOLEAN WsAsyncThreadInitialized;
|
extern BOOLEAN WsAsyncThreadInitialized;
|
||||||
extern PWS_SOCK_POST_ROUTINE WsSockPostRoutine;
|
extern PWS_SOCK_POST_ROUTINE WsSockPostRoutine;
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
HANDLE WsSockHeap;
|
HANDLE WsSockHeap;
|
||||||
HINSTANCE WsDllHandle;
|
HINSTANCE WsDllHandle;
|
||||||
DWORD GlobalTlsIndex;
|
DWORD GlobalTlsIndex = TLS_OUT_OF_INDEXES;
|
||||||
|
|
||||||
/* FUNCTIONS *****************************************************************/
|
/* FUNCTIONS *****************************************************************/
|
||||||
|
|
||||||
|
@ -35,7 +35,6 @@ DllMain(HANDLE hModule,
|
||||||
switch (dwReason)
|
switch (dwReason)
|
||||||
{
|
{
|
||||||
case DLL_PROCESS_ATTACH:
|
case DLL_PROCESS_ATTACH:
|
||||||
|
|
||||||
/* Save DLL Handle */
|
/* Save DLL Handle */
|
||||||
WsDllHandle = hModule;
|
WsDllHandle = hModule;
|
||||||
|
|
||||||
|
@ -43,8 +42,14 @@ DllMain(HANDLE hModule,
|
||||||
WsSockHeap = GetProcessHeap();
|
WsSockHeap = GetProcessHeap();
|
||||||
|
|
||||||
/* TLS Allocation */
|
/* TLS Allocation */
|
||||||
GlobalTlsIndex = TlsAlloc();
|
if (GlobalTlsIndex == TLS_OUT_OF_INDEXES)
|
||||||
if (GlobalTlsIndex == TLS_OUT_OF_INDEXES) return FALSE;
|
{
|
||||||
|
GlobalTlsIndex = TlsAlloc();
|
||||||
|
if (GlobalTlsIndex == TLS_OUT_OF_INDEXES)
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Initialize some critical sections */
|
/* Initialize some critical sections */
|
||||||
WsCreateStartupSynchronization();
|
WsCreateStartupSynchronization();
|
||||||
|
@ -61,7 +66,6 @@ DllMain(HANDLE hModule,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DLL_PROCESS_DETACH:
|
case DLL_PROCESS_DETACH:
|
||||||
|
|
||||||
/* Make sure we were initialized */
|
/* Make sure we were initialized */
|
||||||
if (!WsDllHandle) break;
|
if (!WsDllHandle) break;
|
||||||
|
|
||||||
|
|
|
@ -9,10 +9,6 @@
|
||||||
/* INCLUDES ******************************************************************/
|
/* INCLUDES ******************************************************************/
|
||||||
#include "ws2_32.h"
|
#include "ws2_32.h"
|
||||||
|
|
||||||
/* DATA **********************************************************************/
|
|
||||||
|
|
||||||
DWORD TlsIndex;
|
|
||||||
|
|
||||||
/* FUNCTIONS *****************************************************************/
|
/* FUNCTIONS *****************************************************************/
|
||||||
|
|
||||||
DWORD
|
DWORD
|
||||||
|
@ -156,16 +152,7 @@ WsThreadStartup(VOID)
|
||||||
INT ErrorCode = WSASYSCALLFAILURE;
|
INT ErrorCode = WSASYSCALLFAILURE;
|
||||||
|
|
||||||
/* Check if we have a valid TLS */
|
/* Check if we have a valid TLS */
|
||||||
if (TlsIndex == TLS_OUT_OF_INDEXES)
|
if (TlsIndex != TLS_OUT_OF_INDEXES)
|
||||||
{
|
|
||||||
/* Set the global one */
|
|
||||||
if ((TlsIndex = GlobalTlsIndex) != TLS_OUT_OF_INDEXES)
|
|
||||||
{
|
|
||||||
/* Success! */
|
|
||||||
ErrorCode = ERROR_SUCCESS;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
/* TLS was already OK */
|
/* TLS was already OK */
|
||||||
ErrorCode = ERROR_SUCCESS;
|
ErrorCode = ERROR_SUCCESS;
|
||||||
|
@ -179,12 +166,6 @@ VOID
|
||||||
WSAAPI
|
WSAAPI
|
||||||
WsThreadCleanup(VOID)
|
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
|
DWORD
|
||||||
|
@ -250,6 +231,7 @@ WsThreadDestroyCurrentThread(VOID)
|
||||||
{
|
{
|
||||||
/* Delete it */
|
/* Delete it */
|
||||||
WsThreadDelete(Thread);
|
WsThreadDelete(Thread);
|
||||||
|
TlsSetValue(TlsIndex, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue