From 4242a4e54aba14c31b544486c478346ce581a6cb Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Wed, 7 Aug 2019 13:18:03 +0200 Subject: [PATCH] Propagate cache when calling into runtime (#3319) --- substrate/core/client/src/call_executor.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/substrate/core/client/src/call_executor.rs b/substrate/core/client/src/call_executor.rs index bd00b33e4a..f25f77c484 100644 --- a/substrate/core/client/src/call_executor.rs +++ b/substrate/core/client/src/call_executor.rs @@ -241,7 +241,7 @@ where let mut state = self.backend.state_at(*at)?; - match recorder { + let result = match recorder { Some(recorder) => { let trie_state = state.as_trie_backend() .ok_or_else(|| @@ -286,15 +286,18 @@ where native_call, ) .map(|(result, _, _)| result) - .map_err(Into::into) - } + }?; + self.backend.destroy_state(state)?; + Ok(result) } fn runtime_version(&self, id: &BlockId) -> error::Result { let mut overlay = OverlayedChanges::default(); let state = self.backend.state_at(*id)?; let mut ext = Ext::new(&mut overlay, &state, self.backend.changes_trie_storage(), NeverOffchainExt::new()); - self.executor.runtime_version(&mut ext).ok_or(error::Error::VersionInvalid.into()) + let version = self.executor.runtime_version(&mut ext); + self.backend.destroy_state(state)?; + version.ok_or(error::Error::VersionInvalid.into()) } fn call_at_state<