]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/lib/lockmgr.h
Tweak mutex order for SD
[bacula/bacula] / bacula / src / lib / lockmgr.h
index cd94decb36fff88d9916f0e1039a2f7486bbbecf..03210a9880001b8e242988efa362fa4e53d44ac8 100644 (file)
@@ -29,6 +29,8 @@
 #ifndef _LOCKMGR_H
 #define _LOCKMGR_H 1
 
+#include "mutex_list.h"     /* Manage mutex with priority in a central place */
+
 /*
  * P and V op that don't use the lock manager (for memory allocation or on
  * win32)
@@ -150,21 +152,26 @@ int lmgr_thread_create(pthread_t *thread,
                        const pthread_attr_t *attr,
                        void *(*start_routine)(void*), void *arg);
 
-/* 
- * Define _LOCKMGR_COMPLIANT to use real pthread functions
- */
+#define BTHREAD_MUTEX_NO_PRIORITY      {PTHREAD_MUTEX_INITIALIZER, 0}
+#define BTHREAD_MUTEX_INITIALIZER      BTHREAD_MUTEX_NO_PRIORITY
+
+/* Define USE_LOCKMGR_PRIORITY to detect mutex wrong order */
+#ifdef USE_LOCKMGR_PRIORITY
+# define BTHREAD_MUTEX_PRIORITY(p)       {PTHREAD_MUTEX_INITIALIZER, p}
+#else
+# define BTHREAD_MUTEX_PRIORITY(p)       BTHREAD_MUTEX_NO_PRIORITY
+# define bthread_mutex_set_priority(x,y)
+#endif
 
-#define BTHREAD_MUTEX_NO_PRIORITY     {PTHREAD_MUTEX_INITIALIZER, 0}
-#define BTHREAD_MUTEX_PRIORITY_1      {PTHREAD_MUTEX_INITIALIZER, 1}
-#define BTHREAD_MUTEX_PRIORITY_2      {PTHREAD_MUTEX_INITIALIZER, 2}
-#define BTHREAD_MUTEX_PRIORITY_3      {PTHREAD_MUTEX_INITIALIZER, 3}
-#define BTHREAD_MUTEX_PRIORITY_4      {PTHREAD_MUTEX_INITIALIZER, 4}
-#define BTHREAD_MUTEX_INITIALIZER     BTHREAD_MUTEX_NO_PRIORITY
 #define bthread_mutex_lock(x)      bthread_mutex_lock_p(x, __FILE__, __LINE__)
-#define bthread_mutex_unlock(x)    bthread_mutex_unlock_p
+#define bthread_mutex_unlock(x)    bthread_mutex_unlock_p(x, __FILE__, __LINE__)
 #define bthread_cond_wait(x,y)     bthread_cond_wait_p(x,y, __FILE__, __LINE__)
 #define bthread_cond_timedwait(x,y,z) bthread_cond_timedwait_p(x,y,z, __FILE__, __LINE__)
 
+/* 
+ * Define _LOCKMGR_COMPLIANT to use real pthread functions
+ */
+
 #ifdef _LOCKMGR_COMPLIANT
 # define P(x) lmgr_p(&(x))
 # define V(x) lmgr_v(&(x))
@@ -184,25 +191,22 @@ int lmgr_thread_create(pthread_t *thread,
 # define lmgr_dump()
 # define lmgr_init_thread()
 # define lmgr_cleanup_thread()
-# define lmgr_pre_lock(m, f, l)
+# define lmgr_pre_lock(m, prio, f, l)
 # define lmgr_post_lock()
-# define lmgr_do_lock(m, f, l)
+# define lmgr_do_lock(m, prio, f, l)
 # define lmgr_do_unlock(m)
 # define lmgr_cleanup_main()
 # define bthread_mutex_set_priority(a)
-# define bthread_mutex_lock(a)       pthread_mutex_lock(a)
-# define bthread_mutex_unlock(a)     pthread_mutex_unlock(a)
-# define lmgr_cond_wait(a,b)         pthread_cond_wait(a,b)
-# define lmgr_cond_timedwait(a,b,c)  pthread_cond_timedwait(a,b,c)
-# define bthread_mutex_t             pthread_mutex_t
+# define bthread_mutex_lock(a)          pthread_mutex_lock(a)
+# define bthread_mutex_unlock(a)        pthread_mutex_unlock(a)
+# define lmgr_cond_wait(a,b)            pthread_cond_wait(a,b)
+# define lmgr_cond_timedwait(a,b,c)     pthread_cond_timedwait(a,b,c)
+# define bthread_mutex_t                pthread_mutex_t
 # define P(x) lmgr_p(&(x))
 # define V(x) lmgr_v(&(x))
-# define BTHREAD_MUTEX_NO_PRIORITY  PTHREAD_MUTEX_INITIALIZER
-# define BTHREAD_MUTEX_PRIORITY_1   PTHREAD_MUTEX_INITIALIZER
-# define BTHREAD_MUTEX_PRIORITY_2   PTHREAD_MUTEX_INITIALIZER
-# define BTHREAD_MUTEX_PRIORITY_3   PTHREAD_MUTEX_INITIALIZER
-# define BTHREAD_MUTEX_PRIORITY_4   PTHREAD_MUTEX_INITIALIZER
-# define BTHREAD_MUTEX_INITIALIZER  PTHREAD_MUTEX_INITIALIZER
+# define BTHREAD_MUTEX_PRIORITY(p)      PTHREAD_MUTEX_INITIALIZER
+# define BTHREAD_MUTEX_NO_PRIORITY      PTHREAD_MUTEX_INITIALIZER
+# define BTHREAD_MUTEX_INITIALIZER      PTHREAD_MUTEX_INITIALIZER
 #endif  /* _USE_LOCKMGR */
 
 #endif  /* _LOCKMGR_H */