about summary refs log tree commit diff
path: root/src/rt/rust_kernel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/rt/rust_kernel.cpp')
-rw-r--r--src/rt/rust_kernel.cpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/rt/rust_kernel.cpp b/src/rt/rust_kernel.cpp
index ef4220f9129..0dc1369dca6 100644
--- a/src/rt/rust_kernel.cpp
+++ b/src/rt/rust_kernel.cpp
@@ -164,9 +164,7 @@ void
 rust_kernel::terminate_kernel_loop() {
     log(rust_log::KERN, "terminating kernel loop");
     _interrupt_kernel_loop = true;
-    _kernel_lock.lock();
-    _kernel_lock.signal_all();
-    _kernel_lock.unlock();
+    signal_kernel_lock();
     join();
 }
 
@@ -217,6 +215,23 @@ rust_kernel::free_handles(hash_map<T*, rust_handle<T>* > &map) {
     }
 }
 
+void
+rust_kernel::notify_message_enqueued(rust_message_queue *queue,
+                                     rust_message *message) {
+    // The message pump needs to handle this message if the queue is not
+    // associated with a domain, therefore signal the message pump.
+    if (queue->is_associated() == false) {
+        signal_kernel_lock();
+    }
+}
+
+void
+rust_kernel::signal_kernel_lock() {
+    _kernel_lock.lock();
+    _kernel_lock.signal_all();
+    _kernel_lock.unlock();
+}
+
 //
 // Local Variables:
 // mode: C++