diff --git a/polkadot/node/network/statement-distribution/src/lib.rs b/polkadot/node/network/statement-distribution/src/lib.rs index 54567f0d8afa51f8c8d6a868305609af340fbe90..7e91d2849120283c3fcefc4193a6e3d8bff809a1 100644 --- a/polkadot/node/network/statement-distribution/src/lib.rs +++ b/polkadot/node/network/statement-distribution/src/lib.rs @@ -319,10 +319,12 @@ impl<R: rand::Rng> StatementDistributionSubsystem<R> { if let Some(ref activated) = activated { let mode = prospective_parachains_mode(ctx.sender(), activated.hash).await?; if let ProspectiveParachainsMode::Enabled { .. } = mode { - // Ensure we deactivate first, before we activate the new block. - // Activation can fail and then we would skip the deactivation. + let res = + v2::handle_active_leaves_update(ctx, state, activated, mode).await; + // Regardless of the result of leaf activation, we always prune before + // handling it to avoid leaks. v2::handle_deactivate_leaves(state, &deactivated); - v2::handle_active_leaves_update(ctx, state, activated, mode).await?; + res?; } else if let ProspectiveParachainsMode::Disabled = mode { for deactivated in &deactivated { crate::legacy_v1::handle_deactivate_leaf(legacy_v1_state, *deactivated);