about summary refs log tree commit diff
path: root/src/rt/rust_kernel.cpp
diff options
context:
space:
mode:
authorMichael Bebenita <mbebenita@mozilla.com>2010-09-08 22:20:31 -0700
committerMichael Bebenita <mbebenita@mozilla.com>2010-09-08 22:20:31 -0700
commitc877f31730b3cf156d0b36355ebc99d2e85e455b (patch)
tree45ed0d51aa8205b6051523fddd4eb6ecdc820a6c /src/rt/rust_kernel.cpp
parent743ca289b6cec6dafb1d1952646b7ec73c63cf07 (diff)
downloadrust-c877f31730b3cf156d0b36355ebc99d2e85e455b.tar.gz
rust-c877f31730b3cf156d0b36355ebc99d2e85e455b.zip
Fixed lost signal notifications.
Diffstat (limited to 'src/rt/rust_kernel.cpp')
-rw-r--r--src/rt/rust_kernel.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/rt/rust_kernel.cpp b/src/rt/rust_kernel.cpp
index b94c6c1aca0..b70cdcbaf34 100644
--- a/src/rt/rust_kernel.cpp
+++ b/src/rt/rust_kernel.cpp
@@ -22,8 +22,8 @@ rust_kernel::create_domain(const rust_crate *crate, const char *name) {
     message_queue->associate(handle);
     domains.append(dom);
     message_queues.append(message_queue);
-    _kernel_lock.unlock();
     _kernel_lock.signal();
+    _kernel_lock.unlock();
     return handle;
 }
 
@@ -37,8 +37,8 @@ rust_kernel::destroy_domain(rust_dom *dom) {
     rust_srv *srv = dom->srv;
     delete dom;
     delete srv;
-    _kernel_lock.unlock();
     _kernel_lock.signal();
+    _kernel_lock.unlock();
 }
 
 rust_handle<rust_dom> *
@@ -161,7 +161,9 @@ void
 rust_kernel::terminate_kernel_loop() {
     log(rust_log::KERN, "terminating kernel loop");
     _interrupt_kernel_loop = true;
+    _kernel_lock.lock();
     _kernel_lock.signal();
+    _kernel_lock.unlock();
     join();
 }