Factorize tock storage in assert_once

This commit is contained in:
Julien Cretin
2022-03-04 10:23:44 +01:00
parent 172e629987
commit b80b67e2cf

12
src/env/tock/mod.rs vendored
View File

@@ -77,18 +77,22 @@ impl Env for TockEnv {
} }
fn storage(&mut self) -> StorageResult<Self::Storage> { fn storage(&mut self) -> StorageResult<Self::Storage> {
assert!(!self.storage); assert_once(&mut self.storage);
self.storage = true;
unsafe { steal_storage() } unsafe { steal_storage() }
} }
fn upgrade_storage(&mut self) -> StorageResult<Self::UpgradeStorage> { fn upgrade_storage(&mut self) -> StorageResult<Self::UpgradeStorage> {
assert!(!self.upgrade_storage); assert_once(&mut self.upgrade_storage);
self.upgrade_storage = true;
SyscallUpgradeStorage::new() SyscallUpgradeStorage::new()
} }
} }
/// Asserts a boolean is false and sets it to true.
fn assert_once(b: &mut bool) {
assert!(!*b);
*b = true;
}
// Returns whether the keepalive was sent, or false if cancelled. // Returns whether the keepalive was sent, or false if cancelled.
fn send_keepalive_up_needed( fn send_keepalive_up_needed(
cid: ChannelID, cid: ChannelID,