mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-25 15:20:24 +01:00
Correct lock drop'ing in ChainMonitor::update_channel
e21a500668
cleaned up the error
handling in `ChainMonitor::update_channel` a bit, but accidentally
replaced the deliberate panic with a hang. This commit ensures we
properly drop the monitors read lock before taking a write lock.
This commit is contained in:
parent
ab93d35da2
commit
18a18d8962
1 changed files with 2 additions and 2 deletions
|
@ -753,8 +753,7 @@ where C::Target: chain::Filter,
|
|||
|
||||
fn update_channel(&self, funding_txo: OutPoint, update: &ChannelMonitorUpdate) -> ChannelMonitorUpdateStatus {
|
||||
// Update the monitor that watches the channel referred to by the given outpoint.
|
||||
let monitors_lock = self.monitors.read().unwrap();
|
||||
let monitors = monitors_lock.deref();
|
||||
let monitors = self.monitors.read().unwrap();
|
||||
match monitors.get(&funding_txo) {
|
||||
None => {
|
||||
log_error!(self.logger, "Failed to update channel monitor: no such monitor registered");
|
||||
|
@ -797,6 +796,7 @@ where C::Target: chain::Filter,
|
|||
ChannelMonitorUpdateStatus::UnrecoverableError => {
|
||||
// Take the monitors lock for writing so that we poison it and any future
|
||||
// operations going forward fail immediately.
|
||||
core::mem::drop(pending_monitor_updates);
|
||||
core::mem::drop(monitors);
|
||||
let _poison = self.monitors.write().unwrap();
|
||||
let err_str = "ChannelMonitor[Update] persistence failed unrecoverably. This indicates we cannot continue normal operation and must shut down.";
|
||||
|
|
Loading…
Add table
Reference in a new issue