pshared: Add mutex_init_pshared_with_type()
authorShin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Thu, 28 May 2020 12:56:41 +0000 (21:56 +0900)
committerJens Axboe <axboe@kernel.dk>
Thu, 28 May 2020 16:35:44 +0000 (10:35 -0600)
To initialize mutex to be shared across processes, the helper function
mutex_init_pshared() is available. However, it does not allow to set
mutex attribute types such as POSIX_MUTEX_RECURSIVE.

To allow setting mutex attribute types, introduce another helper function
mutex_init_pshared_with_type(). It initialize mutex for sharing across
processes and set attribute types specified as its argument.

Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
pshared.c
pshared.h

index 211925564b9fb543e4edf1d4c6a26df4bd60db21..791faf95e9569732af1fe05a7ad393c50d57ed6a 100644 (file)
--- a/pshared.c
+++ b/pshared.c
@@ -39,7 +39,7 @@ int cond_init_pshared(pthread_cond_t *cond)
        return 0;
 }
 
-int mutex_init_pshared(pthread_mutex_t *mutex)
+int mutex_init_pshared_with_type(pthread_mutex_t *mutex, int type)
 {
        pthread_mutexattr_t mattr;
        int ret;
@@ -60,6 +60,14 @@ int mutex_init_pshared(pthread_mutex_t *mutex)
                return ret;
        }
 #endif
+       if (type) {
+               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));
@@ -69,6 +77,11 @@ int mutex_init_pshared(pthread_mutex_t *mutex)
        return 0;
 }
 
+int mutex_init_pshared(pthread_mutex_t *mutex)
+{
+       return mutex_init_pshared_with_type(mutex, 0);
+}
+
 int mutex_cond_init_pshared(pthread_mutex_t *mutex, pthread_cond_t *cond)
 {
        int ret;
index a58df6fe0b453802843eaed0ec990199c9a62752..f33be4627f26dd1b25255bd6c15b1449d8822366 100644 (file)
--- a/pshared.h
+++ b/pshared.h
@@ -3,6 +3,7 @@
 
 #include <pthread.h>
 
+extern int mutex_init_pshared_with_type(pthread_mutex_t *, int);
 extern int mutex_init_pshared(pthread_mutex_t *);
 extern int cond_init_pshared(pthread_cond_t *);
 extern int mutex_cond_init_pshared(pthread_mutex_t *, pthread_cond_t *);