From 5b7e0681579b0be6a33da42797ceb3156dac6755 Mon Sep 17 00:00:00 2001 From: whitequark Date: Tue, 29 Nov 2016 14:00:43 +0000 Subject: [PATCH] runtime: clear async RPC queue when kernel stops (fixes #631). --- artiq/runtime.rs/src/kernel.rs | 6 ++++-- artiq/runtime.rs/src/session.rs | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/artiq/runtime.rs/src/kernel.rs b/artiq/runtime.rs/src/kernel.rs index 5d7e17696..5096badc1 100644 --- a/artiq/runtime.rs/src/kernel.rs +++ b/artiq/runtime.rs/src/kernel.rs @@ -21,9 +21,11 @@ pub unsafe fn start() { rpc_queue::init(); } -pub fn stop() { - unsafe { csr::kernel_cpu::reset_write(1) } +pub unsafe fn stop() { + csr::kernel_cpu::reset_write(1); + mailbox::acknowledge(); + rpc_queue::init(); } pub fn validate(ptr: usize) -> bool { diff --git a/artiq/runtime.rs/src/session.rs b/artiq/runtime.rs/src/session.rs index b2f58b5d1..c80719489 100644 --- a/artiq/runtime.rs/src/session.rs +++ b/artiq/runtime.rs/src/session.rs @@ -92,7 +92,7 @@ impl<'a> Session<'a> { impl<'a> Drop for Session<'a> { fn drop(&mut self) { - kernel::stop() + unsafe { kernel::stop() } } } @@ -416,7 +416,7 @@ fn process_kern_message(waiter: Waiter, } &kern::RunFinished => { - kernel::stop(); + unsafe { kernel::stop() } session.kernel_state = KernelState::Absent; unsafe { session.congress.cache.unborrow() } @@ -428,7 +428,7 @@ fn process_kern_message(waiter: Waiter, } &kern::RunException { exception: ref exn, backtrace } => { - kernel::stop(); + unsafe { kernel::stop() } session.kernel_state = KernelState::Absent; unsafe { session.congress.cache.unborrow() }