]> git.bitcoin.ninja Git - rust-lightning/commitdiff
Do not bound callbacks by `Send` when building for `no-std`
authorMatt Corallo <git@bluematt.me>
Wed, 15 Mar 2023 17:43:29 +0000 (17:43 +0000)
committerMatt Corallo <git@bluematt.me>
Mon, 3 Apr 2023 16:49:54 +0000 (16:49 +0000)
`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.

lightning/src/util/wakers.rs

index 1e41b2daee509697db87bd9e67c246b5c0cd25f2..82e2dfc335ce95c2723cbba059a6c0d052bdd6a7 100644 (file)
@@ -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<F: Fn() + Send> FutureCallback for F {
+impl<F: Fn() $(+ $bounds)*> 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