diff options
author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-08-18 12:07:26 +0200 |
---|---|---|
committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2015-09-14 14:45:06 +0200 |
commit | 537188a07d5ee6548555260acdd616034c73c7c4 (patch) | |
tree | dc7c73eb2f00a6302edc0c6eb388b6204d6a759f /kern/lock.c | |
parent | 5cf5aaf24641a5b013eeef05785dc5b129108b18 (diff) |
kern: provide a way to steal a lock
During the message transport, the sender acquires a lock that is
released by the sender. By making this explicit, we can provide
stronger guarantees about the locking.
* ipc/ipc_mqueue.c (ipc_mqueue_receive): Steal lock.
* ipc/ipc_object.h (io_lock_steal): New macro.
* ipc/ipc_port.h (ip_lock_steal): Likewise.
* ipc/mach_msg.c (mach_msg_trap): Steal lock in the inlined version of
`ipc_mqueue_receive'.
* kern/lock.c (lock_done): Assert that the current thread holds the lock.
* kern/lock.h (lock_write_steal): New macro.
Diffstat (limited to 'kern/lock.c')
-rw-r--r-- | kern/lock.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/kern/lock.c b/kern/lock.c index 1daf1b4..473e602 100644 --- a/kern/lock.c +++ b/kern/lock.c @@ -340,6 +340,7 @@ void lock_done( else { l->want_write = FALSE; #if MACH_LDEBUG + assert(have_write_lock(l)); l->writer = THREAD_NULL; #endif /* MACH_LDEBUG */ } |