mirror of
https://github.com/saymrwulf/xous-core.git
synced 2026-11-04 04:27:34 +00:00
xous: envelope: handle MemoryReturned in forward()
Previously, we only handled messages that were forwarded. With this patch, we also handle memory messages that were returned. This fixes #165 Signed-off-by: Sean Cross <sean@xobs.io>
This commit is contained in:
parent
ceef2b0bd6
commit
f4f5418190
1 changed files with 8 additions and 10 deletions
|
|
@ -124,21 +124,19 @@ impl Envelope {
|
|||
));
|
||||
}
|
||||
|
||||
_ => {
|
||||
Message::Borrow(_) | Message::MutableBorrow(_) | Message::Scalar(_) => {
|
||||
let result = crate::send_message(connection, body);
|
||||
let new_self = ManuallyDrop::into_inner(manual_self);
|
||||
|
||||
if let Ok(crate::Result::Ok) = result {
|
||||
match result {
|
||||
// `new_self` will have its Drop() called
|
||||
return Ok(());
|
||||
}
|
||||
Ok(crate::Result::Ok) | Ok(crate::Result::MemoryReturned(_, _)) => Ok(()),
|
||||
|
||||
// If there's an error, reconstitute ourselves and return.
|
||||
if let Err(e) = result {
|
||||
return Err((new_self, e));
|
||||
}
|
||||
// If there's an error, reconstitute ourselves and return.
|
||||
Err(e) => Err((new_self, e)),
|
||||
|
||||
return Err((new_self, crate::Error::MemoryInUse));
|
||||
// Any other value is a bug in the kernel
|
||||
o => panic!("unrecognized return from send_message: {:?}", o),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue