diff --git a/rclrust/src/subscription.rs b/rclrust/src/subscription.rs index 4e6aa91a..1254c030 100644 --- a/rclrust/src/subscription.rs +++ b/rclrust/src/subscription.rs @@ -4,7 +4,7 @@ use std::sync::{Arc, Mutex}; use anyhow::{Context, Result}; -use crate::error::ToRclRustResult; +use crate::error::{RclRustError, ToRclRustResult}; use crate::internal::ffi::*; use crate::log::Logger; use crate::node::{Node, RclNode}; @@ -153,9 +153,13 @@ where fn call_callback(&self) -> Result<()> { let mut message = T::Raw::default(); - self.handle.take::(&mut message)?; - (self.callback)(&message); - + match self.handle.take::(&mut message) { + Ok(_) => (self.callback)(&message), + Err(e) => match e.downcast_ref::() { + Some(RclRustError::RclSubscriptionTakeFailed(_)) => {} + _ => return Err(e), + }, + } Ok(()) } } @@ -230,9 +234,13 @@ where fn call_callback(&self) -> Result<()> { let mut message = T::Raw::default(); - self.handle.take::(&mut message)?; - (self.callback)(unsafe { T::from_raw(&message) }); - + match self.handle.take::(&mut message) { + Ok(_) => (self.callback)(unsafe { T::from_raw(&message) }), + Err(e) => match e.downcast_ref::() { + Some(RclRustError::RclSubscriptionTakeFailed(_)) => {} + _ => return Err(e), + }, + } Ok(()) } }