2 * mono-tls.h: Low-level TLS support
5 * Rodrigo Kumpera (kumpera@gmail.com)
7 * Copyright 2011 Novell, Inc (http://www.novell.com)
8 * Copyright 2011 Xamarin, Inc (http://www.xamarin.com)
9 * Licensed under the MIT license. See LICENSE file in the project root for full license information.
12 #ifndef __MONO_TLS_H__
13 #define __MONO_TLS_H__
17 /* TLS entries used by the runtime */
19 /* mono_thread_internal_current () */
22 /* mono_domain_get () */
25 TLS_KEY_SGEN_THREAD_INFO = 4,
26 TLS_KEY_SGEN_TLAB_NEXT_ADDR = 5,
27 TLS_KEY_SGEN_TLAB_TEMP_END = 6,
28 TLS_KEY_BOEHM_GC_THREAD = 7,
37 #define MonoNativeTlsKey DWORD
38 #define mono_native_tls_alloc(key,destructor) ((*(key) = TlsAlloc ()) != TLS_OUT_OF_INDEXES && destructor == NULL)
39 #define mono_native_tls_free TlsFree
40 #define mono_native_tls_set_value TlsSetValue
41 #define mono_native_tls_get_value TlsGetValue
47 #define MonoNativeTlsKey pthread_key_t
48 #define mono_native_tls_get_value pthread_getspecific
51 mono_native_tls_alloc (MonoNativeTlsKey *key, void *destructor)
53 return pthread_key_create (key, (void (*)(void*)) destructor) == 0;
57 mono_native_tls_free (MonoNativeTlsKey key)
59 pthread_key_delete (key);
63 mono_native_tls_set_value (MonoNativeTlsKey key, gpointer value)
65 return !pthread_setspecific (key, value);
68 #endif /* HOST_WIN32 */
70 int mono_tls_key_get_offset (MonoTlsKey key);
71 void mono_tls_key_set_offset (MonoTlsKey key, int offset);
73 #endif /* __MONO_TLS_H__ */