storing sender id to env

This commit is contained in:
Dominik Maier 2021-06-08 16:24:19 +02:00
parent 5c8c3be9e5
commit 6d2074bd7e

View File

@ -475,7 +475,7 @@ unsafe fn _llmp_next_msg_ptr(last_msg: *const LlmpMsg) -> *mut LlmpMsg {
/// May be used to restore the map by id.
#[derive(Copy, Clone, Debug, Serialize, Deserialize)]
pub struct LlmpDescription {
/// Info about the SharedMap in use
/// Info about the ShredMap in use
shmem: ShMemDescription,
/// The last message sent or received, depnding on page type
last_message_offset: Option<u64>,
@ -751,15 +751,36 @@ where
self.last_msg_sent = ptr::null_mut();
}
/// Reads the stored sender / client id for the given `env_name` (by appending `_CLIENT_ID`).
/// If the content of the env is `_NULL`, returns [`Option::None`].
#[cfg(feature = "std")]
#[inline]
fn client_id_from_env(env_name: &str) -> Result<Option<ClientId>, Error> {
let client_id_str = env::var(&format!("{}_CLIENT_ID", env_name))?;
Ok(if client_id_str == _NULL_ENV_STR {
None
} else {
Some(client_id_str.parse()?)
})
}
/// Writes the `id` to an env var
#[cfg(feature = "std")]
fn client_id_to_env(env_name: &str, id: ClientId) {
env::set_var(&format!("{}_CLIENT_ID", env_name), &format!("{}", id));
}
/// Reattach to a vacant `out_map`, to with a previous sender stored the information in an env before.
#[cfg(feature = "std")]
pub fn on_existing_from_env(mut shmem_provider: SP, env_name: &str) -> Result<Self, Error> {
let msg_sent_offset = msg_offset_from_env(env_name)?;
Self::on_existing_map(
let mut ret = Self::on_existing_map(
shmem_provider.clone(),
shmem_provider.existing_from_env(env_name)?,
msg_sent_offset,
)
)?;
ret.id = Self::client_id_from_env(env_name)?.unwrap_or_default();
Ok(ret)
}
/// Store the info to this sender to env.
@ -768,6 +789,7 @@ where
pub fn to_env(&self, env_name: &str) -> Result<(), Error> {
let current_out_map = self.out_maps.last().unwrap();
current_out_map.shmem.write_to_env(env_name)?;
Self::client_id_to_env(env_name, self.id);
unsafe { current_out_map.msg_to_env(self.last_msg_sent, env_name) }
}