#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)
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))
# 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 */