Make `ChainMonitor::get_claimable_balances` take a slice of refs
authorMatt Corallo <git@bluematt.me>
Wed, 22 Sep 2021 03:57:53 +0000 (03:57 +0000)
committerMatt Corallo <git@bluematt.me>
Wed, 22 Sep 2021 04:42:31 +0000 (04:42 +0000)
For the same reason as `get_route`, a slice of objects isn't
practical to map to bindings - the objects in the bindings space
are structs with a pointer and some additional metadata. Thus, to
create a slice of them, we'd need to take ownership of the objects
behind the pointer, place them into a slace, and then restore them
to the pointer.

This would be a lot of memory copying and marshalling, not to
mention wouldn't be thread-safe, which the same function otherwise
would be if we used a slice of references instead of a slice of
objects.

lightning/src/chain/chainmonitor.rs

index 101ad6652007ff46373fd877a066efa1fd111992..0d3f87645ce4c4c1250d2d42a3a085f419ac13a6 100644 (file)
@@ -150,7 +150,7 @@ where C::Target: chain::Filter,
        ///
        /// See [`ChannelMonitor::get_claimable_balances`] for more details on the exact criteria for
        /// inclusion in the return value.
-       pub fn get_claimable_balances(&self, ignored_channels: &[ChannelDetails]) -> Vec<Balance> {
+       pub fn get_claimable_balances(&self, ignored_channels: &[&ChannelDetails]) -> Vec<Balance> {
                let mut ret = Vec::new();
                let monitors = self.monitors.read().unwrap();
                for (_, monitor) in monitors.iter().filter(|(funding_outpoint, _)| {