Skip to content

Commit 248a107

Browse files
committed
Guard get_and_clear_pending_msg_events
1 parent 282d092 commit 248a107

File tree

1 file changed

+22
-8
lines changed

1 file changed

+22
-8
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ use util::logger::Logger;
6262
use util::errors::APIError;
6363

6464
use core::{cmp, mem};
65+
use std::cell::RefCell;
6566
use std::collections::{HashMap, hash_map, HashSet};
6667
use std::io::{Cursor, Read};
6768
use std::sync::{Arc, Condvar, Mutex, MutexGuard, RwLock, RwLockReadGuard};
@@ -3692,16 +3693,29 @@ impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> MessageSend
36923693
L::Target: Logger,
36933694
{
36943695
fn get_and_clear_pending_msg_events(&self) -> Vec<MessageSendEvent> {
3695-
//TODO: This behavior should be documented. It's non-intuitive that we query
3696-
// ChannelMonitors when clearing other events.
3697-
self.process_pending_monitor_events();
3696+
let events = RefCell::new(Vec::new());
3697+
PersistenceNotifierGuard::optionally_notify(&self.total_consistency_lock, &self.persistence_notifier, || {
3698+
let mut result = NotifyOption::SkipPersist;
36983699

3699-
self.check_free_holding_cells();
3700+
// TODO: This behavior should be documented. It's unintuitive that we query
3701+
// ChannelMonitors when clearing other events.
3702+
if self.process_pending_monitor_events() {
3703+
result = NotifyOption::DoPersist;
3704+
}
37003705

3701-
let mut ret = Vec::new();
3702-
let mut channel_state = self.channel_state.lock().unwrap();
3703-
mem::swap(&mut ret, &mut channel_state.pending_msg_events);
3704-
ret
3706+
self.check_free_holding_cells();
3707+
3708+
let mut pending_events = Vec::new();
3709+
let mut channel_state = self.channel_state.lock().unwrap();
3710+
mem::swap(&mut pending_events, &mut channel_state.pending_msg_events);
3711+
3712+
if !pending_events.is_empty() {
3713+
events.replace(pending_events);
3714+
}
3715+
3716+
result
3717+
});
3718+
events.into_inner()
37053719
}
37063720
}
37073721

0 commit comments

Comments
 (0)