Skip to content

Commit 9ab7a48

Browse files
committed
Use clear helper on flags copy to mask off bits
1 parent e82dba5 commit 9ab7a48

File tree

1 file changed

+21
-7
lines changed

1 file changed

+21
-7
lines changed

lightning/src/ln/channel.rs

+21-7
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,10 @@ macro_rules! define_state_flags {
299299

300300
#[allow(unused)]
301301
fn is_set(&self, flag: Self) -> bool { *self & flag == flag }
302+
#[allow(unused)]
303+
fn set(&mut self, flag: Self) { *self |= flag }
304+
#[allow(unused)]
305+
fn clear(&mut self, flag: Self) -> Self { self.0 &= !flag.0; *self }
302306
}
303307

304308
impl core::ops::Not for $flag_type {
@@ -323,6 +327,16 @@ macro_rules! define_state_flags {
323327
($flag_type_doc: expr, $flag_type: ident, $flags: tt) => {
324328
define_state_flags!($flag_type_doc, $flag_type, $flags, 0);
325329
};
330+
($flag_type: ident, $flag: expr, $get: ident, $set: ident, $clear: ident) => {
331+
impl $flag_type {
332+
#[allow(unused)]
333+
fn $get(&self) -> bool { self.is_set($flag_type::new() | $flag) }
334+
#[allow(unused)]
335+
fn $set(&mut self) { self.set($flag_type::new() | $flag) }
336+
#[allow(unused)]
337+
fn $clear(&mut self) -> Self { self.clear($flag_type::new() | $flag) }
338+
}
339+
};
326340
($flag_type_doc: expr, FUNDED_STATE, $flag_type: ident, $flags: tt) => {
327341
define_state_flags!($flag_type_doc, $flag_type, $flags, FundedStateFlags::ALL.0);
328342
impl core::ops::BitOr<FundedStateFlags> for $flag_type {
@@ -3045,12 +3059,12 @@ impl<SP: Deref> Channel<SP> where
30453059
let mut check_reconnection = false;
30463060
match &self.context.channel_state {
30473061
ChannelState::AwaitingChannelReady(flags) => {
3048-
let flags = *flags & !FundedStateFlags::ALL;
3062+
let flags = flags.clone().clear(FundedStateFlags::ALL.into());
30493063
debug_assert!(!flags.is_set(AwaitingChannelReadyFlags::OUR_CHANNEL_READY) || !flags.is_set(AwaitingChannelReadyFlags::WAITING_FOR_BATCH));
3050-
if flags & !AwaitingChannelReadyFlags::WAITING_FOR_BATCH == AwaitingChannelReadyFlags::THEIR_CHANNEL_READY {
3064+
if flags.clone().clear(AwaitingChannelReadyFlags::WAITING_FOR_BATCH) == AwaitingChannelReadyFlags::THEIR_CHANNEL_READY {
30513065
// If we reconnected before sending our `channel_ready` they may still resend theirs.
30523066
check_reconnection = true;
3053-
} else if (flags & !AwaitingChannelReadyFlags::WAITING_FOR_BATCH).is_empty() {
3067+
} else if flags.clone().clear(AwaitingChannelReadyFlags::WAITING_FOR_BATCH).is_empty() {
30543068
self.context.channel_state.set_their_channel_ready();
30553069
} else if flags == AwaitingChannelReadyFlags::OUR_CHANNEL_READY {
30563070
self.context.channel_state = ChannelState::ChannelReady(self.context.channel_state.with_funded_state_flags_mask().into());
@@ -5185,7 +5199,7 @@ impl<SP: Deref> Channel<SP> where
51855199
if !self.is_awaiting_monitor_update() { return false; }
51865200
if matches!(
51875201
self.context.channel_state, ChannelState::AwaitingChannelReady(flags)
5188-
if (flags & !(AwaitingChannelReadyFlags::THEIR_CHANNEL_READY | FundedStateFlags::PEER_DISCONNECTED | FundedStateFlags::MONITOR_UPDATE_IN_PROGRESS | AwaitingChannelReadyFlags::WAITING_FOR_BATCH)).is_empty()
5202+
if flags.clone().clear(AwaitingChannelReadyFlags::THEIR_CHANNEL_READY | FundedStateFlags::PEER_DISCONNECTED | FundedStateFlags::MONITOR_UPDATE_IN_PROGRESS | AwaitingChannelReadyFlags::WAITING_FOR_BATCH).is_empty()
51895203
) {
51905204
// If we're not a 0conf channel, we'll be waiting on a monitor update with only
51915205
// AwaitingChannelReady set, though our peer could have sent their channel_ready.
@@ -5271,14 +5285,14 @@ impl<SP: Deref> Channel<SP> where
52715285

52725286
// Note that we don't include ChannelState::WaitingForBatch as we don't want to send
52735287
// channel_ready until the entire batch is ready.
5274-
let need_commitment_update = if matches!(self.context.channel_state, ChannelState::AwaitingChannelReady(f) if (f & !FundedStateFlags::ALL).is_empty()) {
5288+
let need_commitment_update = if matches!(self.context.channel_state, ChannelState::AwaitingChannelReady(f) if f.clone().clear(FundedStateFlags::ALL.into()).is_empty()) {
52755289
self.context.channel_state.set_our_channel_ready();
52765290
true
5277-
} else if matches!(self.context.channel_state, ChannelState::AwaitingChannelReady(f) if f & !FundedStateFlags::ALL == AwaitingChannelReadyFlags::THEIR_CHANNEL_READY) {
5291+
} else if matches!(self.context.channel_state, ChannelState::AwaitingChannelReady(f) if f.clone().clear(FundedStateFlags::ALL.into()) == AwaitingChannelReadyFlags::THEIR_CHANNEL_READY) {
52785292
self.context.channel_state = ChannelState::ChannelReady(self.context.channel_state.with_funded_state_flags_mask().into());
52795293
self.context.update_time_counter += 1;
52805294
true
5281-
} else if matches!(self.context.channel_state, ChannelState::AwaitingChannelReady(f) if f & !FundedStateFlags::ALL == AwaitingChannelReadyFlags::OUR_CHANNEL_READY) {
5295+
} else if matches!(self.context.channel_state, ChannelState::AwaitingChannelReady(f) if f.clone().clear(FundedStateFlags::ALL.into()) == AwaitingChannelReadyFlags::OUR_CHANNEL_READY) {
52825296
// We got a reorg but not enough to trigger a force close, just ignore.
52835297
false
52845298
} else {

0 commit comments

Comments
 (0)