X-Git-Url: https://git.harvie.cz/?a=blobdiff_plain;f=c%2Fpthread_extra%2Fpthread_user_data.c;h=87055127dcd178921e68599a0c970b6f02aa2967;hb=30d358cd5a66ea85b06729df8fa13a068ac21d51;hp=e0ba979be0c90751aac8e92429e31f162d6290d3;hpb=238a70320639c49bc44c74588fd94cd435dfa4c3;p=mirrors%2FPrograms.git diff --git a/c/pthread_extra/pthread_user_data.c b/c/pthread_extra/pthread_user_data.c index e0ba979..8705512 100644 --- a/c/pthread_extra/pthread_user_data.c +++ b/c/pthread_extra/pthread_user_data.c @@ -1,5 +1,10 @@ #define __PTHREAD_EXTRA_INTERNAL +#ifndef _GNU_SOURCE +#define _GNU_SOURCE //PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP +#endif //_GNU_SOURCE + +//#include #include #include #include @@ -7,16 +12,16 @@ //Static array with user data for all thread handles //TODO: perhaps use something more sophisticated like linked list? pthread_user_data_internal_t pthread_user_data[PTHREAD_XTHREADS_MAX+1] = {{.tid=PTHREAD_XNULL}}; -pthread_mutex_t pthread_user_data_mutex = PTHREAD_MUTEX_INITIALIZER; +pthread_mutex_t pthread_user_data_mutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; int pthread_user_data_lock() { - pthread_pause_disable(); + //pthread_pause_disable(); return pthread_mutex_lock(&pthread_user_data_mutex); } int pthread_user_data_unlock() { pthread_mutex_unlock(&pthread_user_data_mutex); - pthread_pause_enable(); + //pthread_pause_enable(); return 0; } @@ -34,8 +39,11 @@ pthread_user_data_internal_t* pthread_user_data_internal(pthread_t thread) { pthread_t i; for(i = 0; iusr;