forked from M-Labs/artiq-zynq
check subkernel exceptions only when awaited
This commit is contained in:
parent
6785ca2c85
commit
779aea7c6a
|
@ -187,22 +187,6 @@ async fn handle_run_kernel(
|
|||
) -> Result<()> {
|
||||
control.borrow_mut().tx.async_send(kernel::Message::StartRequest).await;
|
||||
loop {
|
||||
#[cfg(has_drtio)]
|
||||
while let Some(subkernel_finished) =
|
||||
subkernel::get_finished_with_exception(aux_mutex, routing_table, timer).await?
|
||||
{
|
||||
if subkernel_finished.status == subkernel::FinishStatus::CommLost {
|
||||
error!(
|
||||
"Communication with satellite lost while subkernel {} was running",
|
||||
subkernel_finished.id
|
||||
);
|
||||
}
|
||||
if let Some(exception) = subkernel_finished.exception {
|
||||
if let Some(stream) = stream {
|
||||
write_chunk(stream, &exception).await?;
|
||||
}
|
||||
}
|
||||
}
|
||||
let reply = control.borrow_mut().rx.async_recv().await;
|
||||
match reply {
|
||||
kernel::Message::RpcSend { is_async, data } => {
|
||||
|
|
|
@ -160,40 +160,6 @@ pub async fn destination_changed(
|
|||
}
|
||||
}
|
||||
|
||||
pub async fn get_finished_with_exception(
|
||||
aux_mutex: &Rc<Mutex<bool>>,
|
||||
routing_table: &RoutingTable,
|
||||
timer: GlobalTimer,
|
||||
) -> Result<Option<SubkernelFinished>, Error> {
|
||||
let mut locked_subkernels = SUBKERNELS.async_lock().await;
|
||||
for (id, subkernel) in locked_subkernels.iter_mut() {
|
||||
match subkernel.state {
|
||||
SubkernelState::Finished {
|
||||
status: FinishStatus::Ok,
|
||||
} => (),
|
||||
SubkernelState::Finished { status } => {
|
||||
subkernel.state = SubkernelState::Finished {
|
||||
status: FinishStatus::Ok,
|
||||
};
|
||||
return Ok(Some(SubkernelFinished {
|
||||
id: *id,
|
||||
status: status,
|
||||
exception: if status == FinishStatus::Exception {
|
||||
Some(
|
||||
drtio::subkernel_retrieve_exception(aux_mutex, routing_table, timer, subkernel.destination)
|
||||
.await?,
|
||||
)
|
||||
} else {
|
||||
None
|
||||
},
|
||||
}));
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
Ok(None)
|
||||
}
|
||||
|
||||
pub async fn await_finish(
|
||||
aux_mutex: &Rc<Mutex<bool>>,
|
||||
routing_table: &RoutingTable,
|
||||
|
|
Loading…
Reference in New Issue