]> 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>
Tue, 27 Apr 2010 08:13:20 +0000 (10:13 +0200)
bacula/src/lib/lockmgr.c
bacula/src/lib/lockmgr.h

index 97e99889efbab20a6d7efb58db8f1f8688f21892..9af26d831fb2dd6255e57e437dd7f590828b33f9 100644 (file)
@@ -820,6 +820,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
  *
@@ -1189,7 +1208,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 ec5e0dcdd16d3594067607d543d9cf4409267f3b..883a8c084e64d959a9ad125086080a2c8a1460d4 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 */