@@ -29,6 +29,8 @@ use crate::io::{
2929} ;
3030use crate :: logger:: { log_debug, log_error, log_info, LdkLogger } ;
3131
32+ use crate :: runtime:: Runtime ;
33+
3234use lightning:: events:: bump_transaction:: BumpTransactionEvent ;
3335use lightning:: events:: { ClosureReason , PaymentPurpose , ReplayEvent } ;
3436use lightning:: events:: { Event as LdkEvent , PaymentFailureReason } ;
@@ -53,7 +55,7 @@ use core::future::Future;
5355use core:: task:: { Poll , Waker } ;
5456use std:: collections:: VecDeque ;
5557use std:: ops:: Deref ;
56- use std:: sync:: { Arc , Condvar , Mutex , RwLock } ;
58+ use std:: sync:: { Arc , Condvar , Mutex } ;
5759use std:: time:: Duration ;
5860
5961/// An event emitted by [`Node`], which should be handled by the user.
@@ -451,7 +453,7 @@ where
451453 liquidity_source : Option < Arc < LiquiditySource < Arc < Logger > > > > ,
452454 payment_store : Arc < PaymentStore < L > > ,
453455 peer_store : Arc < PeerStore < L > > ,
454- runtime : Arc < RwLock < Option < Arc < tokio :: runtime :: Runtime > > > > ,
456+ runtime : Arc < Runtime > ,
455457 logger : L ,
456458 config : Arc < Config > ,
457459}
@@ -466,8 +468,8 @@ where
466468 channel_manager : Arc < ChannelManager > , connection_manager : Arc < ConnectionManager < L > > ,
467469 output_sweeper : Arc < Sweeper > , network_graph : Arc < Graph > ,
468470 liquidity_source : Option < Arc < LiquiditySource < Arc < Logger > > > > ,
469- payment_store : Arc < PaymentStore < L > > , peer_store : Arc < PeerStore < L > > ,
470- runtime : Arc < RwLock < Option < Arc < tokio :: runtime :: Runtime > > > > , logger : L , config : Arc < Config > ,
471+ payment_store : Arc < PaymentStore < L > > , peer_store : Arc < PeerStore < L > > , runtime : Arc < Runtime > ,
472+ logger : L , config : Arc < Config > ,
471473 ) -> Self {
472474 Self {
473475 event_queue,
@@ -1050,16 +1052,16 @@ where
10501052 let forwarding_channel_manager = self . channel_manager . clone ( ) ;
10511053 let min = time_forwardable. as_millis ( ) as u64 ;
10521054
1053- let runtime_lock = self . runtime . read ( ) . unwrap ( ) ;
1054- debug_assert ! ( runtime_lock. is_some( ) ) ;
1055+ let future = async move {
1056+ let millis_to_sleep = thread_rng ( ) . gen_range ( min..min * 5 ) as u64 ;
1057+ tokio:: time:: sleep ( Duration :: from_millis ( millis_to_sleep) ) . await ;
10551058
1056- if let Some ( runtime) = runtime_lock. as_ref ( ) {
1057- runtime. spawn ( async move {
1058- let millis_to_sleep = thread_rng ( ) . gen_range ( min..min * 5 ) as u64 ;
1059- tokio:: time:: sleep ( Duration :: from_millis ( millis_to_sleep) ) . await ;
1059+ forwarding_channel_manager. process_pending_htlc_forwards ( ) ;
1060+ } ;
10601061
1061- forwarding_channel_manager. process_pending_htlc_forwards ( ) ;
1062- } ) ;
1062+ if let Err ( Error :: NotRunning ) = self . runtime . spawn ( future) {
1063+ log_error ! ( self . logger, "Tried spawing a future while the runtime wasn't available. This should never happen." ) ;
1064+ debug_assert ! ( false , "Tried spawing a future while the runtime wasn't available. This should never happen." ) ;
10631065 }
10641066 } ,
10651067 LdkEvent :: SpendableOutputs { outputs, channel_id } => {
@@ -1420,30 +1422,29 @@ where
14201422 debug_assert ! ( false , "We currently don't handle BOLT12 invoices manually, so this event should never be emitted." ) ;
14211423 } ,
14221424 LdkEvent :: ConnectionNeeded { node_id, addresses } => {
1423- let runtime_lock = self . runtime . read ( ) . unwrap ( ) ;
1424- debug_assert ! ( runtime_lock. is_some( ) ) ;
1425-
1426- if let Some ( runtime) = runtime_lock. as_ref ( ) {
1427- let spawn_logger = self . logger . clone ( ) ;
1428- let spawn_cm = Arc :: clone ( & self . connection_manager ) ;
1429- runtime. spawn ( async move {
1430- for addr in & addresses {
1431- match spawn_cm. connect_peer_if_necessary ( node_id, addr. clone ( ) ) . await {
1432- Ok ( ( ) ) => {
1433- return ;
1434- } ,
1435- Err ( e) => {
1436- log_error ! (
1437- spawn_logger,
1438- "Failed to establish connection to peer {}@{}: {}" ,
1439- node_id,
1440- addr,
1441- e
1442- ) ;
1443- } ,
1444- }
1425+ let spawn_logger = self . logger . clone ( ) ;
1426+ let spawn_cm = Arc :: clone ( & self . connection_manager ) ;
1427+ let future = async move {
1428+ for addr in & addresses {
1429+ match spawn_cm. connect_peer_if_necessary ( node_id, addr. clone ( ) ) . await {
1430+ Ok ( ( ) ) => {
1431+ return ;
1432+ } ,
1433+ Err ( e) => {
1434+ log_error ! (
1435+ spawn_logger,
1436+ "Failed to establish connection to peer {}@{}: {}" ,
1437+ node_id,
1438+ addr,
1439+ e
1440+ ) ;
1441+ } ,
14451442 }
1446- } ) ;
1443+ }
1444+ } ;
1445+ if let Err ( Error :: NotRunning ) = self . runtime . spawn ( future) {
1446+ log_error ! ( self . logger, "Tried spawing a future while the runtime wasn't available. This should never happen." ) ;
1447+ debug_assert ! ( false , "Tried spawing a future while the runtime wasn't available. This should never happen." ) ;
14471448 }
14481449 } ,
14491450 LdkEvent :: BumpTransaction ( bte) => {
0 commit comments