X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c581d553ae0df2e3d481bce42644d2034c5e3dcd..627ead2c22ce3a0522bdfca1eb58123df7bc8413:/src/xbt/xbt_os_thread.c diff --git a/src/xbt/xbt_os_thread.c b/src/xbt/xbt_os_thread.c index cdafb51495..b020ebd04e 100644 --- a/src/xbt/xbt_os_thread.c +++ b/src/xbt/xbt_os_thread.c @@ -23,7 +23,6 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_sync_os, xbt, /* ********************************* PTHREAD IMPLEMENTATION ************************************ */ #ifdef HAVE_PTHREAD_H -#include #include #ifdef HAVE_MUTEX_TIMEDLOCK @@ -219,6 +218,24 @@ xbt_os_thread_t xbt_os_thread_self(void) return res; } +void xbt_os_thread_key_create(xbt_os_thread_key_t* key) { + + int errcode; + if ((errcode = pthread_key_create(key, NULL))) + THROWF(system_error, errcode, "pthread_key_create failed"); +} + +void xbt_os_thread_set_specific(xbt_os_thread_key_t key, void* value) { + + int errcode; + if ((errcode = pthread_setspecific(key, value))) + THROWF(system_error, errcode, "pthread_setspecific failed"); +} + +void* xbt_os_thread_get_specific(xbt_os_thread_key_t key) { + return pthread_getspecific(key); +} + void xbt_os_thread_detach(xbt_os_thread_t thread) { thread->detached = 1; @@ -726,6 +743,21 @@ void xbt_os_thread_exit(int *retval) ExitThread(0); } +void xbt_os_thread_key_create(xbt_os_thread_key_t* key) { + + *key = TlsAlloc(); +} + +void xbt_os_thread_set_specific(xbt_os_thread_key_t key, void* value) { + + if (!TlsSetValue(key, value)) + THROWF(system_error, (int) GetLastError(), "TlsSetValue() failed"); +} + +void* xbt_os_thread_get_specific(xbt_os_thread_key_t key) { + return TlsGetValue(key); +} + void xbt_os_thread_detach(xbt_os_thread_t thread) { THROW_UNIMPLEMENTED; @@ -1147,7 +1179,7 @@ void *xbt_os_thread_get_extra_data(void) xbt_os_rmutex_t xbt_os_rmutex_init(void) { - xbt_os_rmutex_t rmutex = xbt_new0(struct xbt_os_rmutex_, 0); + xbt_os_rmutex_t rmutex = xbt_new0(struct xbt_os_rmutex_, 1); rmutex->mutex = xbt_os_mutex_init(); rmutex->owner = NULL; rmutex->count = 0;