forked from M-Labs/artiq
firmware: Fix kernel RPC handling of zero-size values (e.g. empty arrays)
This commit is contained in:
parent
b4ddf4c86b
commit
cd7a5a3683
|
@ -277,6 +277,11 @@ fn process_host_message(io: &Io,
|
|||
}
|
||||
})?;
|
||||
rpc::recv_return(stream, &tag, slot, &|size| -> Result<_, Error<SchedError>> {
|
||||
if size == 0 {
|
||||
// Don't try to allocate zero-length values, as RpcRecvReply(0) is
|
||||
// used to terminate the kernel-side receive loop.
|
||||
return Ok(0 as *mut ())
|
||||
}
|
||||
kern_send(io, &kern::RpcRecvReply(Ok(size)))?;
|
||||
Ok(kern_recv(io, |reply| {
|
||||
match reply {
|
||||
|
|
|
@ -363,9 +363,27 @@ class _NestedTupleList(EnvExperiment):
|
|||
if a != self.data:
|
||||
raise ValueError
|
||||
|
||||
|
||||
class _EmptyList(EnvExperiment):
|
||||
def build(self):
|
||||
self.setattr_device("core")
|
||||
|
||||
def get_empty(self) -> TList(TInt32):
|
||||
return []
|
||||
|
||||
@kernel
|
||||
def run(self):
|
||||
a = self.get_empty()
|
||||
if a != []:
|
||||
raise ValueError
|
||||
|
||||
|
||||
class ListTupleTest(ExperimentCase):
|
||||
def test_list_tuple(self):
|
||||
self.create(_ListTuple).run()
|
||||
|
||||
def test_nested_tuple_list(self):
|
||||
self.create(_NestedTupleList).run()
|
||||
|
||||
def test_empty_list(self):
|
||||
self.create(_EmptyList).run()
|
||||
|
|
Loading…
Reference in New Issue