diff --git a/lib/lock.h b/lib/lock.h index 3f0da52..04d98e0 100644 --- a/lib/lock.h +++ b/lib/lock.h @@ -361,11 +361,26 @@ typedef pthread_mutex_t gl_recursive_lock_t; PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP # endif # define gl_recursive_lock_init(NAME) \ - do \ - { \ - if (pthread_in_use () && pthread_mutex_init (&NAME, NULL) != 0) \ - abort (); \ - } \ + do \ + { \ + pthread_mutexattr_t mattr; \ + \ + if ( ! pthread_in_use() ) \ + return 0; \ + \ + if (pthread_mutexattr_init (&mattr) != 0) \ + abort (); \ + \ + if (pthread_mutexattr_settype(&mattr, PTHREAD_MUTEX_RECURSIVE) != 0) { \ + pthread_mutexattr_destroy(&mattr); \ + abort (); \ + } \ + \ + if (pthread_mutex_init (&NAME, &mattr) != 0) \ + abort (); \ + \ + pthread_mutexattr_destroy(&mattr); \ + } \ while (0) # define gl_recursive_lock_lock(NAME) \ do \