@@ -29,6 +29,8 @@ use crate::io::{
29
29
} ;
30
30
use crate :: logger:: { log_debug, log_error, log_info, LdkLogger } ;
31
31
32
+ use crate :: runtime:: Runtime ;
33
+
32
34
use lightning:: events:: bump_transaction:: BumpTransactionEvent ;
33
35
use lightning:: events:: { ClosureReason , PaymentPurpose , ReplayEvent } ;
34
36
use lightning:: events:: { Event as LdkEvent , PaymentFailureReason } ;
@@ -53,7 +55,7 @@ use core::future::Future;
53
55
use core:: task:: { Poll , Waker } ;
54
56
use std:: collections:: VecDeque ;
55
57
use std:: ops:: Deref ;
56
- use std:: sync:: { Arc , Condvar , Mutex , RwLock } ;
58
+ use std:: sync:: { Arc , Condvar , Mutex } ;
57
59
use std:: time:: Duration ;
58
60
59
61
/// An event emitted by [`Node`], which should be handled by the user.
@@ -451,7 +453,7 @@ where
451
453
liquidity_source : Option < Arc < LiquiditySource < Arc < Logger > > > > ,
452
454
payment_store : Arc < PaymentStore < L > > ,
453
455
peer_store : Arc < PeerStore < L > > ,
454
- runtime : Arc < RwLock < Option < Arc < tokio :: runtime :: Runtime > > > > ,
456
+ runtime : Arc < Runtime > ,
455
457
logger : L ,
456
458
config : Arc < Config > ,
457
459
}
@@ -466,8 +468,8 @@ where
466
468
channel_manager : Arc < ChannelManager > , connection_manager : Arc < ConnectionManager < L > > ,
467
469
output_sweeper : Arc < Sweeper > , network_graph : Arc < Graph > ,
468
470
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 > ,
471
473
) -> Self {
472
474
Self {
473
475
event_queue,
@@ -1050,16 +1052,16 @@ where
1050
1052
let forwarding_channel_manager = self . channel_manager . clone ( ) ;
1051
1053
let min = time_forwardable. as_millis ( ) as u64 ;
1052
1054
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 ;
1055
1058
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
+ } ;
1060
1061
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." ) ;
1063
1065
}
1064
1066
} ,
1065
1067
LdkEvent :: SpendableOutputs { outputs, channel_id } => {
@@ -1420,30 +1422,29 @@ where
1420
1422
debug_assert ! ( false , "We currently don't handle BOLT12 invoices manually, so this event should never be emitted." ) ;
1421
1423
} ,
1422
1424
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
+ } ,
1445
1442
}
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." ) ;
1447
1448
}
1448
1449
} ,
1449
1450
LdkEvent :: BumpTransaction ( bte) => {
0 commit comments