Skip to content

Commit

Permalink
Drop the whole ZBuf in case of SHM error!
Browse files Browse the repository at this point in the history
  • Loading branch information
yellowhatter committed Jul 18, 2024
1 parent 0c998d2 commit 839ffe3
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 15 deletions.
7 changes: 6 additions & 1 deletion io/zenoh-transport/src/multicast/rx.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
//
use std::sync::MutexGuard;

#[cfg(feature = "shared-memory")]
use tracing::error;
use zenoh_core::{zlock, zread};
use zenoh_protocol::{
core::{Locator, Priority, Reliability},
Expand Down Expand Up @@ -44,7 +46,10 @@ impl TransportMulticastInner {
#[cfg(feature = "shared-memory")]
{
if self.manager.config.multicast.is_shm {
crate::shm::map_zmsg_to_shmbuf(&mut msg, &self.manager.shmr)?;
if let Err(e) = crate::shm::map_zmsg_to_shmbuf(&mut msg, &self.manager.shmr) {
error!("Error receiving SHM buffer: {e}");
return Ok(());
}
}
}

Expand Down
17 changes: 5 additions & 12 deletions io/zenoh-transport/src/shm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
//
use std::collections::HashSet;

use tracing::error;
use zenoh_buffers::{reader::HasReader, writer::HasWriter, ZBuf, ZSlice, ZSliceKind};
use zenoh_codec::{RCodec, WCodec, Zenoh080};
use zenoh_core::zerror;
Expand Down Expand Up @@ -331,17 +330,11 @@ pub fn map_zslice_to_shmbuf(zslice: &mut ZSlice, shmr: &ShmReader) -> ZResult<()
// Deserialize the shminfo
let shmbinfo: ShmBufInfo = codec.read(&mut reader).map_err(|e| zerror!("{:?}", e))?;

// Try to mount shmbuf and replace the content of the slice with mounted buf
// NOTE: SHM buffer read error is not a hard error because we do not want to
// loose all the data in the whole ZBuf above. In case of error we just
// replace current ZSlice with an empty one
*zslice = match shmr.read_shmbuf(&shmbinfo) {
Ok(val) => val.into(),
Result::Err(e) => {
error!("{e}");
vec![].into()
}
};
// Mount shmbuf
let smb = shmr.read_shmbuf(&shmbinfo)?;

// Replace the content of the slice
*zslice = smb.into();

Ok(())
}
7 changes: 6 additions & 1 deletion io/zenoh-transport/src/unicast/lowlatency/rx.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
// Contributors:
// ZettaScale Zenoh Team, <[email protected]>
//
#[cfg(feature = "shared-memory")]
use tracing::error;
use zenoh_buffers::{
reader::{HasReader, Reader},
ZSlice,
Expand All @@ -37,7 +39,10 @@ impl TransportUnicastLowlatency {
#[cfg(feature = "shared-memory")]
{
if self.config.shm.is_some() {
crate::shm::map_zmsg_to_shmbuf(&mut msg, &self.manager.shmr)?;
if let Err(e) = crate::shm::map_zmsg_to_shmbuf(&mut msg, &self.manager.shmr) {
error!("Error receiving SHM buffer: {e}");
return Ok(());
}
}
}
callback.handle_message(msg)
Expand Down
7 changes: 6 additions & 1 deletion io/zenoh-transport/src/unicast/universal/rx.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
//
use std::sync::MutexGuard;

#[cfg(feature = "shared-memory")]
use tracing::error;
use zenoh_core::{zlock, zread};
use zenoh_link::Link;
use zenoh_protocol::{
Expand Down Expand Up @@ -45,7 +47,10 @@ impl TransportUnicastUniversal {
#[cfg(feature = "shared-memory")]
{
if self.config.shm.is_some() {
crate::shm::map_zmsg_to_shmbuf(&mut msg, &self.manager.shmr)?;
if let Err(e) = crate::shm::map_zmsg_to_shmbuf(&mut msg, &self.manager.shmr) {
error!("Error receiving SHM buffer: {e}");
return Ok(());
}
}
}
callback.handle_message(msg)
Expand Down

0 comments on commit 839ffe3

Please sign in to comment.