From: Matt Corallo Date: Wed, 15 Mar 2023 17:43:29 +0000 (+0000) Subject: Do not bound callbacks by `Send` when building for `no-std` X-Git-Tag: v0.0.115~41^2~5 X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=328407351c6aeb84e9407281ec5d35b1a4690650;p=rust-lightning Do not bound callbacks by `Send` when building for `no-std` `Send` is rather useless on a `no-std` target - we don't have threads and are just needlessly restricting ourselves, so here we skip it for the wakers callback. --- diff --git a/lightning/src/util/wakers.rs b/lightning/src/util/wakers.rs index 1e41b2dae..82e2dfc33 100644 --- a/lightning/src/util/wakers.rs +++ b/lightning/src/util/wakers.rs @@ -137,6 +137,7 @@ impl Notifier { } } +macro_rules! define_callback { ($($bounds: path),*) => { /// A callback which is called when a [`Future`] completes. /// /// Note that this MUST NOT call back into LDK directly, it must instead schedule actions to be @@ -145,14 +146,20 @@ impl Notifier { /// /// Note that the [`std::future::Future`] implementation may only work for runtimes which schedule /// futures when they receive a wake, rather than immediately executing them. -pub trait FutureCallback : Send { +pub trait FutureCallback : $($bounds +)* { /// The method which is called. fn call(&self); } -impl FutureCallback for F { +impl FutureCallback for F { fn call(&self) { (self)(); } } +} } + +#[cfg(feature = "std")] +define_callback!(Send); +#[cfg(not(feature = "std"))] +define_callback!(); pub(crate) struct FutureState { // When we're tracking whether a callback counts as having woken the user's code, we check the