* The rw_lock now behaves just like a recursive locker if KDEBUG_RW_LOCK_DEBUG

is defined to 1; this allows asserting the read lock case, too.
* Added ASSERT_{READ|WRITE}_LOCKED_RW_LOCK() macros. The read assertion is only
  working when KDEBUG_RW_LOCK_DEBUG is defined to 1, the write assertion works
  always.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26686 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2008-07-30 15:27:58 +00:00
parent 87b8310c0f
commit 37de5a0d83
4 changed files with 27 additions and 2 deletions
+15 -2
View File
@@ -54,12 +54,25 @@ typedef struct rw_lock {
#if KDEBUG
# define KDEBUG_RW_LOCK_DEBUG 0
// Define to 1 if you want to use ASSERT_READ_LOCKED_RW_LOCK().
// The rw_lock will just behave like a recursive locker then.
# define ASSERT_LOCKED_RECURSIVE(r) \
{ ASSERT(find_thread(NULL) == (r)->lock.holder); }
# define ASSERT_LOCKED_MUTEX(m) { ASSERT(find_thread(NULL) == (m)->holder); }
# define ASSERT_WRITE_LOCKED_RW_LOCK(l) \
{ ASSERT(find_thread(NULL) == (l)->holder); }
# if KDEBUG_RW_LOCK_DEBUG
# define ASSERT_READ_LOCKED_RW_LOCK(l) \
{ ASSERT(find_thread(NULL) == (l)->holder); }
# else
# define ASSERT_READ_LOCKED_RW_LOCK(l) do {} while (false)
# endif
#else
# define ASSERT_LOCKED_RECURSIVE(r) do {} while (false)
# define ASSERT_LOCKED_MUTEX(m) do {} while (false)
# define ASSERT_LOCKED_RECURSIVE(r) do {} while (false)
# define ASSERT_LOCKED_MUTEX(m) do {} while (false)
# define ASSERT_WRITE_LOCKED_RW_LOCK(m) do {} while (false)
# define ASSERT_READ_LOCKED_RW_LOCK(l) do {} while (false)
#endif