X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=src%2Fln%2Fchannel.rs;h=cbcec942d80661dafb83e13f98826dfc2cceb2d1;hb=302f1314e5ad33e38d7be000498a670f0e30b183;hp=f6177e9eb6b9cc2f1786c60247b1fcaecae8e5ac;hpb=a2df43d525322812a6081e5ae0a666ce79efc20b;p=rust-lightning diff --git a/src/ln/channel.rs b/src/ln/channel.rs index f6177e9e..cbcec942 100644 --- a/src/ln/channel.rs +++ b/src/ln/channel.rs @@ -2154,7 +2154,7 @@ impl Channel { /// commitment update or a revoke_and_ack generation). The messages which were generated from /// that original call must *not* have been sent to the remote end, and must instead have been /// dropped. They will be regenerated when monitor_updating_restored is called. - pub fn monitor_update_failed(&mut self, order: RAACommitmentOrder) { + pub fn monitor_update_failed(&mut self, order: RAACommitmentOrder, mut pending_forwards: Vec<(PendingForwardHTLCInfo, u64)>, mut pending_fails: Vec<(HTLCSource, [u8; 32], HTLCFailReason)>, raa_first_dropped_cs: bool) { assert_eq!(self.channel_state & ChannelState::MonitorUpdateFailed as u32, 0); match order { RAACommitmentOrder::CommitmentFirst => { @@ -2163,9 +2163,13 @@ impl Channel { }, RAACommitmentOrder::RevokeAndACKFirst => { self.monitor_pending_revoke_and_ack = true; - self.monitor_pending_commitment_signed = false; + self.monitor_pending_commitment_signed = raa_first_dropped_cs; }, } + assert!(self.monitor_pending_forwards.is_empty()); + mem::swap(&mut pending_forwards, &mut self.monitor_pending_forwards); + assert!(self.monitor_pending_failures.is_empty()); + mem::swap(&mut pending_fails, &mut self.monitor_pending_failures); self.monitor_pending_order = Some(order); self.channel_state |= ChannelState::MonitorUpdateFailed as u32; }