session.rs has code like:
while !rpc_queue::empty() {
try!(process_kern_queued_rpc(stream, &mut session))
}
// A
if mailbox::receive() != 0 {
try!(process_kern_message(waiter, Some(stream), &mut session));
}
If both an async and a mailbox RPC (async or large sync) are posted
at point A then they will be processed out of order.
This commit fixes the issue by flushing the async RPC queue before
posting any RPC to the mailbox.
* master: (72 commits)
gateware: extend mailbox to 3 entries.
master/worker_db: set default value for archive
master: keep dataset manager consistent when set_dataset is called with contradictory attributes
master: archive input datasets. Closes#587
master: ensure same dataset is in broadcast and local when mutating
scheduler: default submission arguments, closes#577
pdq2: sync with pdq2
doc: clarify usage of pause/check_pause, closes#571
dashboard/datasets: use scientific spinbox and increase number of decimals, closes#572
gateware/spi: fix import
runtime: fix use of $(realpath) in Makefile.
test: fix printf specifier.
llvm_ir_generator: make sure RPC allocations are not underaligned.
runtime: use i64 for watchdog timeout, not i32.
runtime: port ksupport to Rust.
runtime: remove some redundant libm functions copied inline.
language: Add "A" (ampere) as well-known unit for arguments
conda: misoc 0.4 (csr)
runtime: cap log level at debug.
runtime: discard unnecessary sections.
...