diff options
Diffstat (limited to 'kern/lock.h')
-rw-r--r-- | kern/lock.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/kern/lock.h b/kern/lock.h index 74cd933..c8af883 100644 --- a/kern/lock.h +++ b/kern/lock.h @@ -211,10 +211,21 @@ extern void lock_clear_recursive(lock_t); #if ! MACH_LDEBUG #define have_read_lock(l) 1 #define have_write_lock(l) 1 +#define lock_write_surrender(l) +#define lock_write_steal(l) #else /* MACH_LDEBUG */ /* XXX: We don't keep track of readers, so this is an approximation. */ #define have_read_lock(l) ((l)->read_count > 0) #define have_write_lock(l) ((l)->writer == current_thread()) +#define THREAD_SURRENDERED ((thread_t) ~0U) +#define lock_write_surrender(l) ({ \ + assert(have_write_lock(l)); \ + (l)->writer = THREAD_SURRENDERED; \ + }) +#define lock_write_steal(l) ({ \ + assert((l)->writer == THREAD_SURRENDERED); \ + (l)->writer = current_thread(); \ + }) #endif /* MACH_LDEBUG */ #define have_lock(l) (have_read_lock(l) || have_write_lock(l)) |