summaryrefslogtreecommitdiff
path: root/kern/exception.c
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2015-08-16 02:18:47 +0200
committerJustus Winter <4winter@informatik.uni-hamburg.de>2015-08-28 15:47:56 +0200
commit787a6034170b59d55afe8d0a12cb0904f20cb74d (patch)
treed20fcc9b98882c7bb62500185cbfb08006fec26a /kern/exception.c
parent069a8a3decf5981cd420014384ead470eac8561c (diff)
codify locking contracts
Conflicts: vm/vm_page.h
Diffstat (limited to 'kern/exception.c')
-rw-r--r--kern/exception.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/kern/exception.c b/kern/exception.c
index 63a63d6..5338274 100644
--- a/kern/exception.c
+++ b/kern/exception.c
@@ -454,6 +454,8 @@ exception_raise(
(sizeof(struct mach_exception) <= receiver->ith_msize) &&
((receiver->ith_option & MACH_RCV_NOTIFY) == 0))) ||
!thread_handoff(self, exception_raise_continue, receiver)) {
+ imq_lock_steal(reply_mqueue);
+ imq_lock_steal(dest_mqueue);
imq_unlock(reply_mqueue);
imq_unlock(dest_mqueue);
goto slow_exception_raise;
@@ -461,6 +463,8 @@ exception_raise(
counter(c_exception_raise_block++);
assert(current_thread() == receiver);
+ imq_lock_steal(reply_mqueue);
+ imq_lock_steal(dest_mqueue);
/*
* We need to finish preparing self for its