X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=pshared.c;h=182a36529df70acbd9b254a00444c2eacc02c2c6;hp=211925564b9fb543e4edf1d4c6a26df4bd60db21;hb=5ddf46d0b2dfe10b9a518db1f936c81e099b2646;hpb=78b66d32c2952d13d1ba73a2e2c15739585535a9 diff --git a/pshared.c b/pshared.c index 21192556..182a3652 100644 --- a/pshared.c +++ b/pshared.c @@ -39,7 +39,11 @@ int cond_init_pshared(pthread_cond_t *cond) return 0; } -int mutex_init_pshared(pthread_mutex_t *mutex) +/* + * 'type' must be a mutex type, e.g. PTHREAD_MUTEX_NORMAL, + * PTHREAD_MUTEX_ERRORCHECK, PTHREAD_MUTEX_RECURSIVE or PTHREAD_MUTEX_DEFAULT. + */ +int mutex_init_pshared_with_type(pthread_mutex_t *mutex, int type) { pthread_mutexattr_t mattr; int ret; @@ -51,7 +55,7 @@ int mutex_init_pshared(pthread_mutex_t *mutex) } /* - * Not all platforms support process shared mutexes (FreeBSD) + * Not all platforms support process shared mutexes (NetBSD/OpenBSD) */ #ifdef CONFIG_PSHARED ret = pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED); @@ -60,15 +64,26 @@ int mutex_init_pshared(pthread_mutex_t *mutex) return ret; } #endif + ret = pthread_mutexattr_settype(&mattr, type); + if (ret) { + log_err("pthread_mutexattr_settype: %s\n", strerror(ret)); + return ret; + } ret = pthread_mutex_init(mutex, &mattr); if (ret) { log_err("pthread_mutex_init: %s\n", strerror(ret)); return ret; } + pthread_mutexattr_destroy(&mattr); return 0; } +int mutex_init_pshared(pthread_mutex_t *mutex) +{ + return mutex_init_pshared_with_type(mutex, PTHREAD_MUTEX_DEFAULT); +} + int mutex_cond_init_pshared(pthread_mutex_t *mutex, pthread_cond_t *cond) { int ret;