Skip to content

Commit 4a67705

Browse files
committed
f Move event emission to own macro and avoid back-to-back locking
1 parent 6bf73ec commit 4a67705

File tree

1 file changed

+33
-23
lines changed

1 file changed

+33
-23
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1487,18 +1487,30 @@ macro_rules! send_channel_ready {
14871487
}}
14881488
}
14891489

1490+
macro_rules! emit_channel_pending_event {
1491+
($locked_events: expr, $channel: expr) => {
1492+
if $channel.should_emit_channel_pending_event() {
1493+
$locked_events.push(events::Event::ChannelPending {
1494+
channel_id: $channel.channel_id(),
1495+
former_temporary_channel_id: $channel.temporary_channel_id(),
1496+
counterparty_node_id: $channel.get_counterparty_node_id(),
1497+
user_channel_id: $channel.get_user_id(),
1498+
funding_txo: $channel.get_funding_txo().unwrap().into_bitcoin_outpoint(),
1499+
});
1500+
$channel.set_channel_pending_event_emitted();
1501+
}
1502+
}
1503+
}
1504+
14901505
macro_rules! emit_channel_ready_event {
1491-
($self: expr, $channel: expr) => {
1506+
($locked_events: expr, $channel: expr) => {
14921507
if $channel.should_emit_channel_ready_event() {
1493-
{
1494-
let mut pending_events = $self.pending_events.lock().unwrap();
1495-
pending_events.push(events::Event::ChannelReady {
1496-
channel_id: $channel.channel_id(),
1497-
user_channel_id: $channel.get_user_id(),
1498-
counterparty_node_id: $channel.get_counterparty_node_id(),
1499-
channel_type: $channel.get_channel_type().clone(),
1500-
});
1501-
}
1508+
$locked_events.push(events::Event::ChannelReady {
1509+
channel_id: $channel.channel_id(),
1510+
user_channel_id: $channel.get_user_id(),
1511+
counterparty_node_id: $channel.get_counterparty_node_id(),
1512+
channel_type: $channel.get_channel_type().clone(),
1513+
});
15021514
$channel.set_channel_ready_event_emitted();
15031515
}
15041516
}
@@ -4251,20 +4263,12 @@ where
42514263
self.tx_broadcaster.broadcast_transaction(&tx);
42524264
}
42534265

4254-
if channel.should_emit_channel_pending_event() {
4266+
{
42554267
let mut pending_events = self.pending_events.lock().unwrap();
4256-
pending_events.push(events::Event::ChannelPending {
4257-
channel_id: channel.channel_id(),
4258-
former_temporary_channel_id: channel.temporary_channel_id(),
4259-
counterparty_node_id: counterparty_node_id,
4260-
user_channel_id: channel.get_user_id(),
4261-
funding_txo: channel.get_funding_txo().unwrap().into_bitcoin_outpoint(),
4262-
});
4263-
channel.set_channel_pending_event_emitted();
4268+
emit_channel_pending_event!(pending_events, channel);
4269+
emit_channel_ready_event!(pending_events, channel);
42644270
}
42654271

4266-
emit_channel_ready_event!(self, channel);
4267-
42684272
htlc_forwards
42694273
}
42704274

@@ -4689,7 +4693,10 @@ where
46894693
}
46904694
}
46914695

4692-
emit_channel_ready_event!(self, chan.get_mut());
4696+
{
4697+
let mut pending_events = self.pending_events.lock().unwrap();
4698+
emit_channel_ready_event!(pending_events, chan.get_mut());
4699+
}
46934700

46944701
Ok(())
46954702
},
@@ -6014,7 +6021,10 @@ where
60146021
}
60156022
}
60166023

6017-
emit_channel_ready_event!(self, channel);
6024+
{
6025+
let mut pending_events = self.pending_events.lock().unwrap();
6026+
emit_channel_ready_event!(pending_events, channel);
6027+
}
60186028

60196029
if let Some(announcement_sigs) = announcement_sigs {
60206030
log_trace!(self.logger, "Sending announcement_signatures for channel {}", log_bytes!(channel.channel_id()));

0 commit comments

Comments
 (0)