]> git.sur5r.net Git - bacula/bacula/commitdiff
Add lmgr_is_locked() function to test if a thread own a mutex
authorEric Bollengier <eric@eb.homelinux.org>
Mon, 26 Apr 2010 09:39:30 +0000 (11:39 +0200)
committerEric Bollengier <eric@eb.homelinux.org>
Mon, 2 Aug 2010 14:53:45 +0000 (16:53 +0200)
bacula/src/lib/lockmgr.c
bacula/src/lib/lockmgr.h

index bbbce8e34a8d51fb2ffef1658c06c1c0aed5f701..e95c92c24fc74a61d405833a3e7ec0a14d5dec7a 100644 (file)
@@ -823,6 +823,25 @@ int bthread_cond_timedwait_p(pthread_cond_t *cond,
    return ret;
 }
 
+/*  Test if this mutex is locked by the current thread 
+ *  returns:
+ *     0 - unlocked
+ *     1 - locked by the current thread
+ *     2 - locked by an other thread
+ */
+int lmgr_mutex_is_locked(void *m)
+{
+   lmgr_thread_t *self = lmgr_get_thread_info();
+
+   for(int i=0; i <= self->current; i++) {
+      if (self->lock_list[i].lock == m) {
+         return 1;              /* locked by us */
+      }
+   }
+
+   return 0;                    /* not locked by us */
+}
+
 /*
  * Use this function when the caller handle the mutex directly
  *
@@ -1192,7 +1211,9 @@ int main(int argc, char **argv)
    P(mutex4);
    P(mutex5);
    P(mutex6);
+   ok(lmgr_mutex_is_locked(&mutex6) == 1, "Check if mutex is locked"); 
    V(mutex6);
+   ok(lmgr_mutex_is_locked(&mutex6) == 0, "Check if mutex is locked"); 
    V(mutex5);
    V(mutex4);
 
index 64ccbd31fe542eb260bb8ac82daee38fc7cf16d9..a0bd8694929a1500713b3d9b25f4ecc22b733d1e 100644 (file)
@@ -86,6 +86,12 @@ int bthread_mutex_lock_p(bthread_mutex_t *m,
 int bthread_mutex_unlock_p(bthread_mutex_t *m, 
                            const char *file="*unknown*", int line=0);
 
+/*  Test if this mutex is locked by the current thread
+ *     0 - not locked by the current thread
+ *     1 - locked by the current thread
+ */
+int lmgr_mutex_is_locked(void *m);
+                   
 /* 
  * Use them when you want use your lock yourself (ie rwlock)
  */
@@ -208,6 +214,8 @@ int lmgr_thread_create(pthread_t *thread,
 # define BTHREAD_MUTEX_PRIORITY(p)      PTHREAD_MUTEX_INITIALIZER
 # define BTHREAD_MUTEX_NO_PRIORITY      PTHREAD_MUTEX_INITIALIZER
 # define BTHREAD_MUTEX_INITIALIZER      PTHREAD_MUTEX_INITIALIZER
+# define lmgr_mutex_is_locked(m)        (1)
+
 #endif  /* _USE_LOCKMGR */
 
 #endif  /* _LOCKMGR_H */