diff --git a/programs/bpf_loader/src/lib.rs b/programs/bpf_loader/src/lib.rs index c3826ebba1..61e9cb9358 100644 --- a/programs/bpf_loader/src/lib.rs +++ b/programs/bpf_loader/src/lib.rs @@ -552,7 +552,7 @@ mod tests { &program_id, Rent::default(), vec![], - vec![], + &[], None, ComputeBudget { max_units: 1, diff --git a/runtime/src/message_processor.rs b/runtime/src/message_processor.rs index 829f9dd603..33fe5f616c 100644 --- a/runtime/src/message_processor.rs +++ b/runtime/src/message_processor.rs @@ -200,11 +200,11 @@ impl ComputeMeter for ThisComputeMeter { self.remaining } } -pub struct ThisInvokeContext { +pub struct ThisInvokeContext<'a> { program_ids: Vec, rent: Rent, pre_accounts: Vec, - programs: Vec<(Pubkey, ProcessInstructionWithContext)>, + programs: &'a [(Pubkey, ProcessInstructionWithContext)], logger: Rc>, compute_budget: ComputeBudget, compute_meter: Rc>, @@ -212,12 +212,12 @@ pub struct ThisInvokeContext { instruction_recorder: Option, feature_set: Arc, } -impl ThisInvokeContext { +impl<'a> ThisInvokeContext<'a> { pub fn new( program_id: &Pubkey, rent: Rent, pre_accounts: Vec, - programs: Vec<(Pubkey, ProcessInstructionWithContext)>, + programs: &'a [(Pubkey, ProcessInstructionWithContext)], log_collector: Option>, compute_budget: ComputeBudget, executors: Rc>, @@ -242,7 +242,7 @@ impl ThisInvokeContext { } } } -impl InvokeContext for ThisInvokeContext { +impl<'a> InvokeContext for ThisInvokeContext<'a> { fn push(&mut self, key: &Pubkey) -> Result<(), InstructionError> { if self.program_ids.len() > self.compute_budget.max_invoke_depth { return Err(InstructionError::CallDepth); @@ -281,7 +281,7 @@ impl InvokeContext for ThisInvokeContext { .ok_or(InstructionError::GenericError) } fn get_programs(&self) -> &[(Pubkey, ProcessInstructionWithContext)] { - &self.programs + self.programs } fn get_logger(&self) -> Rc> { self.logger.clone() @@ -674,7 +674,7 @@ impl MessageProcessor { instruction.program_id(&message.account_keys), rent_collector.rent, pre_accounts, - self.programs.clone(), // get rid of clone + &self.programs, log_collector, Self::get_compute_budget(&feature_set), executors, @@ -767,7 +767,7 @@ mod tests { &program_ids[0], Rent::default(), pre_accounts, - vec![], + &[], None, ComputeBudget::default(), Rc::new(RefCell::new(Executors::default())), @@ -1598,7 +1598,7 @@ mod tests { &caller_program_id, Rent::default(), vec![owned_preaccount, not_owned_preaccount], - vec![], + &[], None, ComputeBudget::default(), Rc::new(RefCell::new(Executors::default())),