ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

tls.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.