Consolidate all the pub aync utils to `native_async`
What changed, and why it matters
This commit is a straightforward internal code cleanup: it moves two helper marker traits (MaybeSend and MaybeSync) from one Rust module (async_poll) to another (native_async) and updates all import paths accordingly. There is no change to what the code does, no bug fix, and no security-related behavior change.
No security action needed. Treat as a normal refactoring commit.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff consolidates public async utility marker traits. MaybeSend and MaybeSync are removed from lightning/src/util/async_poll.rs and added to lightning/src/util/native_async.rs. All call sites are updated to import from native_async. The async_poll module is also made crate-private (pub(crate)). The trait definitions and conditional cfg logic remain identical, so this is a pure refactor with no functional or API semantic change.
Changed components
lightning/src/util/async_poll.rslightning/src/util/native_async.rslightning/src/util/mod.rsimport paths across fuzz tests, background processor, chain monitor, funding, signer, persist, test utils, and wallet utilsInspect captured patch +44 / −43
diff --git a/fuzz/src/chanmon_consistency.rs b/fuzz/src/chanmon_consistency.rs
index 98725bd..6091c66 100644
--- a/fuzz/src/chanmon_consistency.rs
+++ b/fuzz/src/chanmon_consistency.rs
@@ -74,11 +74,11 @@ use lightning::sign::{
SignerProvider,
};
use lightning::types::payment::{PaymentHash, PaymentPreimage, PaymentSecret};
-use lightning::util::async_poll::{MaybeSend, MaybeSync};
use lightning::util::config::UserConfig;
use lightning::util::errors::APIError;
use lightning::util::hash_tables::*;
use lightning::util::logger::Logger;
+use lightning::util::native_async::{MaybeSend, MaybeSync};
use lightning::util::ser::{LengthReadable, ReadableArgs, Writeable, Writer};
use lightning::util::test_channel_signer::{EnforcementState, SignerOp, TestChannelSigner};
use lightning::util::test_utils::TestWalletSource;
diff --git a/fuzz/src/full_stack.rs b/fuzz/src/full_stack.rs
index 3b7c99e..92c854b 100644
--- a/fuzz/src/full_stack.rs
+++ b/fuzz/src/full_stack.rs
@@ -63,10 +63,10 @@ use lightning::sign::{
SignerProvider,
};
use lightning::types::payment::{PaymentHash, PaymentPreimage, PaymentSecret};
-use lightning::util::async_poll::{MaybeSend, MaybeSync};
use lightning::util::config::{ChannelConfig, UserConfig};
use lightning::util::hash_tables::*;
use lightning::util::logger::Logger;
+use lightning::util::native_async::{MaybeSend, MaybeSync};
use lightning::util::ser::{Readable, Writeable};
use lightning::util::test_channel_signer::{EnforcementState, TestChannelSigner};
use lightning::util::test_utils::TestWalletSource;
@@ -1954,8 +1954,8 @@ pub fn write_fst_seeds(path: &str) {
#[cfg(test)]
mod tests {
- use lightning::util::async_poll::{MaybeSend, MaybeSync};
use lightning::util::logger::{Logger, Record};
+ use lightning::util::native_async::{MaybeSend, MaybeSync};
use std::collections::HashMap;
use std::sync::{Arc, Mutex};
diff --git a/lightning-background-processor/src/lib.rs b/lightning-background-processor/src/lib.rs
index 4d6e770..c796c53 100644
--- a/lightning-background-processor/src/lib.rs
+++ b/lightning-background-processor/src/lib.rs
@@ -55,9 +55,9 @@ use lightning::routing::utxo::UtxoLookup;
#[cfg(not(c_bindings))]
use lightning::sign::EntropySource;
use lightning::sign::{ChangeDestinationSource, ChangeDestinationSourceSync, OutputSpender};
-#[cfg(not(c_bindings))]
-use lightning::util::async_poll::MaybeSend;
use lightning::util::logger::Logger;
+#[cfg(not(c_bindings))]
+use lightning::util::native_async::MaybeSend;
use lightning::util::persist::{
KVStore, KVStoreSync, KVStoreSyncWrapper, CHANNEL_MANAGER_PERSISTENCE_KEY,
CHANNEL_MANAGER_PERSISTENCE_PRIMARY_NAMESPACE, CHANNEL_MANAGER_PERSISTENCE_SECONDARY_NAMESPACE,
diff --git a/lightning/src/chain/chainmonitor.rs b/lightning/src/chain/chainmonitor.rs
index 07d835d..125f206 100644
--- a/lightning/src/chain/chainmonitor.rs
+++ b/lightning/src/chain/chainmonitor.rs
@@ -51,10 +51,9 @@ use crate::sign::ecdsa::EcdsaChannelSigner;
use crate::sign::{EntropySource, PeerStorageKey, SignerProvider};
use crate::sync::{Mutex, MutexGuard, RwLock, RwLockReadGuard};
use crate::types::features::{InitFeatures, NodeFeatures};
-use crate::util::async_poll::{MaybeSend, MaybeSync};
use crate::util::errors::APIError;
use crate::util::logger::{Logger, WithContext};
-use crate::util::native_async::FutureSpawner;
+use crate::util::native_async::{FutureSpawner, MaybeSend, MaybeSync};
use crate::util::persist::{KVStore, MonitorName, MonitorUpdatingPersisterAsync};
#[cfg(peer_storage)]
use crate::util::ser::{VecWriter, Writeable};
diff --git a/lightning/src/ln/funding.rs b/lightning/src/ln/funding.rs
index c81024c..353d43c 100644
--- a/lightning/src/ln/funding.rs
+++ b/lightning/src/ln/funding.rs
@@ -22,7 +22,7 @@ use crate::ln::msgs;
use crate::ln::types::ChannelId;
use crate::ln::LN_MAX_MSG_LEN;
use crate::prelude::*;
-use crate::util::async_poll::MaybeSend;
+use crate::util::native_async::MaybeSend;
use crate::util::wallet_utils::{
CoinSelection, CoinSelectionSource, CoinSelectionSourceSync, Input,
};
diff --git a/lightning/src/sign/mod.rs b/lightning/src/sign/mod.rs
index fa77b3c..3237149 100644
--- a/lightning/src/sign/mod.rs
+++ b/lightning/src/sign/mod.rs
@@ -56,7 +56,7 @@ use crate::ln::script::ShutdownScript;
use crate::offers::invoice::UnsignedBolt12Invoice;
use crate::types::features::ChannelTypeFeatures;
use crate::types::payment::PaymentPreimage;
-use crate::util::async_poll::MaybeSend;
+use crate::util::native_async::MaybeSend;
use crate::util::ser::{ReadableArgs, Writeable};
use crate::util::transaction_utils;
diff --git a/lightning/src/util/async_poll.rs b/lightning/src/util/async_poll.rs
index 57df5b2..23ca1aa 100644
--- a/lightning/src/util/async_poll.rs
+++ b/lightning/src/util/async_poll.rs
@@ -164,31 +164,3 @@ const DUMMY_WAKER_VTABLE: RawWakerVTable = RawWakerVTable::new(
pub(crate) fn dummy_waker() -> Waker {
unsafe { Waker::from_raw(RawWaker::new(core::ptr::null(), &DUMMY_WAKER_VTABLE)) }
}
-
-/// Marker trait to optionally implement `Sync` under std.
-///
-/// This is not exported to bindings users as async is only supported in Rust.
-#[cfg(feature = "std")]
-pub use core::marker::Sync as MaybeSync;
-
-#[cfg(not(feature = "std"))]
-/// Marker trait to optionally implement `Sync` under std.
-///
-/// This is not exported to bindings users as async is only supported in Rust.
-pub trait MaybeSync {}
-#[cfg(not(feature = "std"))]
-impl<T> MaybeSync for T where T: ?Sized {}
-
-/// Marker trait to optionally implement `Send` under std.
-///
-/// This is not exported to bindings users as async is only supported in Rust.
-#[cfg(feature = "std")]
-pub use core::marker::Send as MaybeSend;
-
-#[cfg(not(feature = "std"))]
-/// Marker trait to optionally implement `Send` under std.
-///
-/// This is not exported to bindings users as async is only supported in Rust.
-pub trait MaybeSend {}
-#[cfg(not(feature = "std"))]
-impl<T> MaybeSend for T where T: ?Sized {}
diff --git a/lightning/src/util/mod.rs b/lightning/src/util/mod.rs
index 75434fd..4f3e930 100644
--- a/lightning/src/util/mod.rs
+++ b/lightning/src/util/mod.rs
@@ -20,7 +20,7 @@ pub mod mut_global;
pub mod anchor_channel_reserves;
-pub mod async_poll;
+pub(crate) mod async_poll;
#[cfg(fuzzing)]
pub mod base32;
#[cfg(not(fuzzing))]
diff --git a/lightning/src/util/native_async.rs b/lightning/src/util/native_async.rs
index 0c380f2..31b07c2 100644
--- a/lightning/src/util/native_async.rs
+++ b/lightning/src/util/native_async.rs
@@ -9,8 +9,9 @@
#[cfg(all(test, feature = "std"))]
use crate::sync::{Arc, Mutex};
-use crate::util::async_poll::{MaybeSend, MaybeSync};
+#[cfg(test)]
+use alloc::boxed::Box;
#[cfg(all(test, not(feature = "std")))]
use alloc::rc::Rc;
@@ -53,6 +54,34 @@ trait MaybeSendableFuture: Future<Output = ()> + MaybeSend + 'static {}
#[cfg(test)]
impl<F: Future<Output = ()> + MaybeSend + 'static> MaybeSendableFuture for F {}
+/// Marker trait to optionally implement `Sync` under std.
+///
+/// This is not exported to bindings users as async is only supported in Rust.
+#[cfg(feature = "std")]
+pub use core::marker::Sync as MaybeSync;
+
+#[cfg(not(feature = "std"))]
+/// Marker trait to optionally implement `Sync` under std.
+///
+/// This is not exported to bindings users as async is only supported in Rust.
+pub trait MaybeSync {}
+#[cfg(not(feature = "std"))]
+impl<T> MaybeSync for T where T: ?Sized {}
+
+/// Marker trait to optionally implement `Send` under std.
+///
+/// This is not exported to bindings users as async is only supported in Rust.
+#[cfg(feature = "std")]
+pub use core::marker::Send as MaybeSend;
+
+#[cfg(not(feature = "std"))]
+/// Marker trait to optionally implement `Send` under std.
+///
+/// This is not exported to bindings users as async is only supported in Rust.
+pub trait MaybeSend {}
+#[cfg(not(feature = "std"))]
+impl<T> MaybeSend for T where T: ?Sized {}
+
/// A simple [`FutureSpawner`] which holds [`Future`]s until they are manually polled via
/// [`Self::poll_futures`].
#[cfg(all(test, feature = "std"))]
diff --git a/lightning/src/util/persist.rs b/lightning/src/util/persist.rs
index 7df63aa..6835963 100644
--- a/lightning/src/util/persist.rs
+++ b/lightning/src/util/persist.rs
@@ -38,10 +38,10 @@ use crate::ln::types::ChannelId;
use crate::sign::{ecdsa::EcdsaChannelSigner, EntropySource, SignerProvider};
use crate::sync::Mutex;
use crate::util::async_poll::{
- dummy_waker, MaybeSend, MaybeSync, MultiResultFuturePoller, ResultFuture, TwoFutureJoiner,
+ dummy_waker, MultiResultFuturePoller, ResultFuture, TwoFutureJoiner,
};
use crate::util::logger::Logger;
-use crate::util::native_async::FutureSpawner;
+use crate::util::native_async::{FutureSpawner, MaybeSend, MaybeSync};
use crate::util::ser::{Readable, ReadableArgs, Writeable};
use crate::util::wakers::Notifier;
diff --git a/lightning/src/util/test_utils.rs b/lightning/src/util/test_utils.rs
index 4b037cd..57f9ba6 100644
--- a/lightning/src/util/test_utils.rs
+++ b/lightning/src/util/test_utils.rs
@@ -49,7 +49,6 @@ use crate::sign::{self, ReceiveAuthKey};
use crate::sign::{ChannelSigner, PeerStorageKey};
use crate::sync::RwLock;
use crate::types::features::{ChannelFeatures, InitFeatures, NodeFeatures};
-use crate::util::async_poll::MaybeSend;
use crate::util::config::UserConfig;
use crate::util::dyn_signer::{
DynKeysInterface, DynKeysInterfaceTrait, DynPhantomKeysInterface, DynSigner,
@@ -57,6 +56,7 @@ use crate::util::dyn_signer::{
use crate::util::logger::{Logger, Record};
#[cfg(feature = "std")]
use crate::util::mut_global::MutGlobal;
+use crate::util::native_async::MaybeSend;
use crate::util::persist::{KVStore, KVStoreSync, MonitorName};
use crate::util::ser::{Readable, ReadableArgs, Writeable, Writer};
use crate::util::test_channel_signer::{EnforcementState, TestChannelSigner};
diff --git a/lightning/src/util/wallet_utils.rs b/lightning/src/util/wallet_utils.rs
index b82437c..be8d947 100644
--- a/lightning/src/util/wallet_utils.rs
+++ b/lightning/src/util/wallet_utils.rs
@@ -24,9 +24,10 @@ use crate::ln::chan_utils::{
use crate::prelude::*;
use crate::sign::{P2TR_KEY_PATH_WITNESS_WEIGHT, P2WPKH_WITNESS_WEIGHT};
use crate::sync::Mutex;
-use crate::util::async_poll::{dummy_waker, MaybeSend, MaybeSync};
+use crate::util::async_poll::dummy_waker;
use crate::util::hash_tables::{new_hash_map, HashMap};
use crate::util::logger::Logger;
+use crate::util::native_async::{MaybeSend, MaybeSync};
use bitcoin::amount::Amount;
use bitcoin::consensus::Encodable;
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.