@@ -6,17 +6,17 @@ use ldk_node::bitcoin::{OutPoint, Txid};
66use ldk_node:: lightning:: events:: { ClosureReason , PaymentFailureReason } ;
77use ldk_node:: lightning:: ln:: types:: ChannelId ;
88use ldk_node:: lightning:: util:: logger:: Logger as _;
9- use ldk_node:: lightning:: util:: persist:: KVStoreSync ;
9+ use ldk_node:: lightning:: util:: persist:: KVStore ;
1010use ldk_node:: lightning:: util:: ser:: { Writeable , Writer } ;
1111use ldk_node:: lightning:: { impl_writeable_tlv_based_enum, log_debug, log_error, log_warn} ;
1212use ldk_node:: lightning_types:: payment:: { PaymentHash , PaymentPreimage } ;
1313use ldk_node:: payment:: { ConfirmationStatus , PaymentKind } ;
1414use ldk_node:: { CustomTlvRecord , DynStore , UserChannelId } ;
1515
1616use std:: collections:: VecDeque ;
17- use std:: sync:: { Arc , Mutex } ;
17+ use std:: sync:: Arc ;
1818use std:: task:: { Poll , Waker } ;
19- use tokio:: sync:: watch;
19+ use tokio:: sync:: { Mutex , watch} ;
2020
2121/// The event queue will be persisted under this key.
2222pub ( crate ) const EVENT_QUEUE_PERSISTENCE_PRIMARY_NAMESPACE : & str = "" ;
@@ -218,52 +218,55 @@ impl EventQueue {
218218 Self { queue, waker, kv_store, logger }
219219 }
220220
221- pub ( crate ) fn add_event ( & self , event : Event ) -> Result < ( ) , ldk_node:: lightning:: io:: Error > {
221+ pub ( crate ) async fn add_event (
222+ & self , event : Event ,
223+ ) -> Result < ( ) , ldk_node:: lightning:: io:: Error > {
222224 {
223- let mut locked_queue = self . queue . lock ( ) . unwrap ( ) ;
225+ let mut locked_queue = self . queue . lock ( ) . await ;
224226 locked_queue. push_back ( event) ;
225- self . persist_queue ( & locked_queue) ?;
227+ self . persist_queue ( & locked_queue) . await ?;
226228 }
227229
228- if let Some ( waker) = self . waker . lock ( ) . unwrap ( ) . take ( ) {
230+ if let Some ( waker) = self . waker . lock ( ) . await . take ( ) {
229231 waker. wake ( ) ;
230232 }
231233 Ok ( ( ) )
232234 }
233235
234- pub ( crate ) fn next_event ( & self ) -> Option < Event > {
235- let locked_queue = self . queue . lock ( ) . unwrap ( ) ;
236+ pub ( crate ) async fn next_event ( & self ) -> Option < Event > {
237+ let locked_queue = self . queue . lock ( ) . await ;
236238 locked_queue. front ( ) . cloned ( )
237239 }
238240
239241 pub ( crate ) async fn next_event_async ( & self ) -> Event {
240242 EventFuture { event_queue : Arc :: clone ( & self . queue ) , waker : Arc :: clone ( & self . waker ) } . await
241243 }
242244
243- pub ( crate ) fn event_handled ( & self ) -> Result < ( ) , ldk_node:: lightning:: io:: Error > {
245+ pub ( crate ) async fn event_handled ( & self ) -> Result < ( ) , ldk_node:: lightning:: io:: Error > {
244246 {
245- let mut locked_queue = self . queue . lock ( ) . unwrap ( ) ;
247+ let mut locked_queue = self . queue . lock ( ) . await ;
246248 locked_queue. pop_front ( ) ;
247- self . persist_queue ( & locked_queue) ?;
249+ self . persist_queue ( & locked_queue) . await ?;
248250 }
249251
250- if let Some ( waker) = self . waker . lock ( ) . unwrap ( ) . take ( ) {
252+ if let Some ( waker) = self . waker . lock ( ) . await . take ( ) {
251253 waker. wake ( ) ;
252254 }
253255 Ok ( ( ) )
254256 }
255257
256- fn persist_queue (
258+ async fn persist_queue (
257259 & self , locked_queue : & VecDeque < Event > ,
258260 ) -> Result < ( ) , ldk_node:: lightning:: io:: Error > {
259261 let data = EventQueueSerWrapper ( locked_queue) . encode ( ) ;
260- KVStoreSync :: write (
262+ KVStore :: write (
261263 self . kv_store . as_ref ( ) ,
262264 EVENT_QUEUE_PERSISTENCE_PRIMARY_NAMESPACE ,
263265 EVENT_QUEUE_PERSISTENCE_SECONDARY_NAMESPACE ,
264266 EVENT_QUEUE_PERSISTENCE_KEY ,
265267 data,
266268 )
269+ . await
267270 . map_err ( |e| {
268271 log_error ! (
269272 self . logger. as_ref( ) ,
@@ -302,10 +305,12 @@ impl Future for EventFuture {
302305 fn poll (
303306 self : core:: pin:: Pin < & mut Self > , cx : & mut core:: task:: Context < ' _ > ,
304307 ) -> Poll < Self :: Output > {
305- if let Some ( event) = self . event_queue . lock ( ) . unwrap ( ) . front ( ) {
306- Poll :: Ready ( event. clone ( ) )
308+ if let Some ( event) = self . event_queue . try_lock ( ) . ok ( ) . and_then ( |q| q . front ( ) . cloned ( ) ) {
309+ Poll :: Ready ( event)
307310 } else {
308- * self . waker . lock ( ) . unwrap ( ) = Some ( cx. waker ( ) . clone ( ) ) ;
311+ if let Ok ( mut waker) = self . waker . try_lock ( ) {
312+ * waker = Some ( cx. waker ( ) . clone ( ) ) ;
313+ }
309314 Poll :: Pending
310315 }
311316 }
@@ -338,22 +343,30 @@ impl LdkEventHandler {
338343 log_error ! ( self . logger, "Failed to set preimage for payment {payment_id:?}" ) ;
339344 }
340345
341- if let Err ( e) = self . event_queue . add_event ( Event :: PaymentSuccessful {
342- payment_id,
343- payment_hash,
344- payment_preimage : preimage,
345- fee_paid_msat,
346- } ) {
346+ if let Err ( e) = self
347+ . event_queue
348+ . add_event ( Event :: PaymentSuccessful {
349+ payment_id,
350+ payment_hash,
351+ payment_preimage : preimage,
352+ fee_paid_msat,
353+ } )
354+ . await
355+ {
347356 log_error ! ( self . logger, "Failed to add PaymentSuccessful event: {e:?}" ) ;
348357 return ;
349358 }
350359 } ,
351360 ldk_node:: Event :: PaymentFailed { payment_id, payment_hash, reason } => {
352- if let Err ( e) = self . event_queue . add_event ( Event :: PaymentFailed {
353- payment_id : PaymentId :: SelfCustodial ( payment_id. unwrap ( ) . 0 ) , // safe
354- payment_hash,
355- reason,
356- } ) {
361+ if let Err ( e) = self
362+ . event_queue
363+ . add_event ( Event :: PaymentFailed {
364+ payment_id : PaymentId :: SelfCustodial ( payment_id. unwrap ( ) . 0 ) , // safe
365+ payment_hash,
366+ reason,
367+ } )
368+ . await
369+ {
357370 log_error ! ( self . logger, "Failed to add PaymentFailed event: {e:?}" ) ;
358371 return ;
359372 }
@@ -373,13 +386,17 @@ impl LdkEventHandler {
373386 }
374387 } ) ;
375388
376- if let Err ( e) = self . event_queue . add_event ( Event :: PaymentReceived {
377- payment_id : PaymentId :: SelfCustodial ( payment_id. 0 ) ,
378- payment_hash,
379- amount_msat,
380- custom_records,
381- lsp_fee_msats,
382- } ) {
389+ if let Err ( e) = self
390+ . event_queue
391+ . add_event ( Event :: PaymentReceived {
392+ payment_id : PaymentId :: SelfCustodial ( payment_id. 0 ) ,
393+ payment_hash,
394+ amount_msat,
395+ custom_records,
396+ lsp_fee_msats,
397+ } )
398+ . await
399+ {
383400 log_error ! ( self . logger, "Failed to add PaymentReceived event: {e:?}" ) ;
384401 }
385402 let _ = self . payment_receipt_sender . send ( ( ) ) ;
@@ -402,12 +419,16 @@ impl LdkEventHandler {
402419 } => {
403420 let funding_txo = funding_txo. unwrap ( ) ; // safe
404421
405- if let Err ( e) = self . event_queue . add_event ( Event :: ChannelOpened {
406- channel_id,
407- user_channel_id,
408- counterparty_node_id : counterparty_node_id. unwrap ( ) , // safe
409- funding_txo,
410- } ) {
422+ if let Err ( e) = self
423+ . event_queue
424+ . add_event ( Event :: ChannelOpened {
425+ channel_id,
426+ user_channel_id,
427+ counterparty_node_id : counterparty_node_id. unwrap ( ) , // safe
428+ funding_txo,
429+ } )
430+ . await
431+ {
411432 log_error ! ( self . logger, "Failed to add ChannelOpened event: {e:?}" ) ;
412433 return ;
413434 }
@@ -423,12 +444,16 @@ impl LdkEventHandler {
423444 // try to reopen the channel.
424445 store:: set_rebalance_enabled ( self . event_queue . kv_store . as_ref ( ) , false ) ;
425446
426- if let Err ( e) = self . event_queue . add_event ( Event :: ChannelClosed {
427- channel_id,
428- user_channel_id,
429- counterparty_node_id : counterparty_node_id. unwrap ( ) , // safe
430- reason,
431- } ) {
447+ if let Err ( e) = self
448+ . event_queue
449+ . add_event ( Event :: ChannelClosed {
450+ channel_id,
451+ user_channel_id,
452+ counterparty_node_id : counterparty_node_id. unwrap ( ) , // safe
453+ reason,
454+ } )
455+ . await
456+ {
432457 log_error ! ( self . logger, "Failed to add ChannelClosed event: {e:?}" ) ;
433458 return ;
434459 }
@@ -442,12 +467,16 @@ impl LdkEventHandler {
442467 log_debug ! ( self . logger, "Received SplicePending event {event:?}" ) ;
443468 let _ = self . splice_pending_sender . send ( user_channel_id. 0 ) ;
444469
445- if let Err ( e) = self . event_queue . add_event ( Event :: SplicePending {
446- channel_id,
447- user_channel_id,
448- counterparty_node_id,
449- new_funding_txo,
450- } ) {
470+ if let Err ( e) = self
471+ . event_queue
472+ . add_event ( Event :: SplicePending {
473+ channel_id,
474+ user_channel_id,
475+ counterparty_node_id,
476+ new_funding_txo,
477+ } )
478+ . await
479+ {
451480 log_error ! ( self . logger, "Failed to add SplicePending event: {e:?}" ) ;
452481 return ;
453482 }
0 commit comments