Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygentls.c
Go to the documentation of this file.
00001 #include <precomp.h> 00002 #include <stdlib.h> 00003 #include <internal/tls.h> 00004 #include <internal/rterror.h> 00005 00006 /* Index to TLS */ 00007 static DWORD msvcrt_tls_index; 00008 00009 inline BOOL msvcrt_init_tls(void) 00010 { 00011 msvcrt_tls_index = TlsAlloc(); 00012 00013 if (msvcrt_tls_index == TLS_OUT_OF_INDEXES) 00014 { 00015 ERR("TlsAlloc() failed!\n"); 00016 return FALSE; 00017 } 00018 return TRUE; 00019 } 00020 00021 inline BOOL msvcrt_free_tls(void) 00022 { 00023 if (!TlsFree(msvcrt_tls_index)) 00024 { 00025 ERR("TlsFree() failed!\n"); 00026 return FALSE; 00027 } 00028 return TRUE; 00029 } 00030 00031 thread_data_t *msvcrt_get_thread_data(void) 00032 { 00033 thread_data_t *ptr; 00034 DWORD err = GetLastError(); /* need to preserve last error */ 00035 00036 if (!(ptr = TlsGetValue( msvcrt_tls_index ))) 00037 { 00038 if (!(ptr = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ptr) ))) 00039 _amsg_exit( _RT_THREAD ); 00040 if (!TlsSetValue( msvcrt_tls_index, ptr )) _amsg_exit( _RT_THREAD ); 00041 ptr->tid = GetCurrentThreadId(); 00042 ptr->handle = INVALID_HANDLE_VALUE; 00043 ptr->random_seed = 1; 00044 //ptr->locinfo = MSVCRT_locale->locinfo; 00045 //ptr->mbcinfo = MSVCRT_locale->mbcinfo; 00046 } 00047 SetLastError( err ); 00048 return ptr; 00049 } 00050 00051 inline void msvcrt_free_tls_mem(void) 00052 { 00053 thread_data_t *tls = TlsGetValue(msvcrt_tls_index); 00054 00055 if (tls) 00056 { 00057 CloseHandle(tls->handle); 00058 HeapFree(GetProcessHeap(),0,tls->efcvt_buffer); 00059 HeapFree(GetProcessHeap(),0,tls->asctime_buffer); 00060 HeapFree(GetProcessHeap(),0,tls->wasctime_buffer); 00061 HeapFree(GetProcessHeap(),0,tls->strerror_buffer); 00062 HeapFree(GetProcessHeap(),0,tls->wcserror_buffer); 00063 HeapFree(GetProcessHeap(),0,tls->time_buffer); 00064 //if(tls->have_locale) { 00065 // free_locinfo(tls->locinfo); 00066 // free_mbcinfo(tls->mbcinfo); 00067 //} 00068 } 00069 HeapFree(GetProcessHeap(), 0, tls); 00070 } 00071 00072 /* EOF */ 00073 Generated on Sun May 27 2012 04:36:29 for ReactOS by
1.7.6.1
|