Skip to content

Commit 240fc03

Browse files
committed
f duh - just update under the lock
1 parent 1816e2b commit 240fc03

File tree

1 file changed

+10
-11
lines changed

1 file changed

+10
-11
lines changed

lightning/src/chain/chainmonitor.rs

+10-11
Original file line numberDiff line numberDiff line change
@@ -262,19 +262,18 @@ where C::Target: chain::Filter,
262262
FN: Fn(&ChannelMonitor<ChannelSigner>, &TransactionData) -> Vec<TransactionOutputs>
263263
{
264264
let mut dependent_txdata = Vec::new();
265-
if let Some(height) = best_height {
266-
// Sadly AtomicUsize::fetch_max wasn't stabilized until 1.45, so until then we have to
267-
// manually CAS.
268-
let mut old_height = self.highest_chain_height.load(Ordering::Relaxed);
269-
let new_height = height as usize;
270-
while new_height > old_height && self.highest_chain_height
271-
.compare_exchange(old_height, new_height, Ordering::AcqRel, Ordering::Relaxed).is_err()
272-
{
273-
old_height = self.highest_chain_height.load(Ordering::Acquire);
274-
}
275-
}
276265
{
277266
let monitor_states = self.monitors.write().unwrap();
267+
if let Some(height) = best_height {
268+
// If the best block height is being updated, update highest_chain_height under the
269+
// monitors write lock.
270+
let old_height = self.highest_chain_height.load(Ordering::Acquire);
271+
let new_height = height as usize;
272+
if new_height > old_height {
273+
self.highest_chain_height.store(new_height, Ordering::Release);
274+
}
275+
}
276+
278277
for (funding_outpoint, monitor_state) in monitor_states.iter() {
279278
let monitor = &monitor_state.monitor;
280279
let mut txn_outputs;

0 commit comments

Comments
 (0)