--- orig/libguile/pthread-threads.h +++ mod/libguile/pthread-threads.h @@ -43,13 +43,51 @@ /* Mutexes */ -#define SCM_I_PTHREAD_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER +#ifdef SCM_USE_ERROR_CHECKING_MUTEXES +# if (!defined PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP) || (!defined __GNUC__) +# undef SCM_USE_ERROR_CHECKING_MUTEXES +# endif +#endif + +#ifdef SCM_USE_ERROR_CHECKING_MUTEXES +# define SCM_I_PTHREAD_MUTEX_INITIALIZER PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP +#else +# define SCM_I_PTHREAD_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER +#endif + #define scm_i_pthread_mutex_t pthread_mutex_t #define scm_i_pthread_mutex_init pthread_mutex_init #define scm_i_pthread_mutex_destroy pthread_mutex_destroy #define scm_i_pthread_mutex_trylock pthread_mutex_trylock -#define scm_i_pthread_mutex_lock pthread_mutex_lock -#define scm_i_pthread_mutex_unlock pthread_mutex_unlock + +#ifdef SCM_USE_ERROR_CHECKING_MUTEXES + +# define scm_i_pthread_mutex_lock(m) \ + ({ \ + int mutex_err_; \ + mutex_err_ = pthread_mutex_lock (m); \ + if (mutex_err_) \ + scm_syserror_msg ("mutex_lock", "`pthread_mutex_lock' failed", \ + SCM_EOL, mutex_err_); \ + mutex_err_; \ + }) +# define scm_i_pthread_mutex_unlock(m) \ + ({ \ + int mutex_err_; \ + mutex_err_ = pthread_mutex_unlock (m); \ + if (mutex_err_) \ + scm_syserror_msg ("mutex_unlock", "`pthread_mutex_unlock' failed", \ + SCM_EOL, mutex_err_); \ + mutex_err_; \ + }) + +#else /* !SCM_USE_ERROR_CHECKING_MUTEXES */ + +# define scm_i_pthread_mutex_lock pthread_mutex_lock +# define scm_i_pthread_mutex_unlock pthread_mutex_unlock + +#endif /* !SCM_USE_ERROR_CHECKING_MUTEXES */ + extern pthread_mutexattr_t scm_i_pthread_mutexattr_recursive[1]; /* Condition variables