From e95355e56e9336d3c064a9fd34ecfbf559e8dd35 Mon Sep 17 00:00:00 2001 From: Mark Date: Sat, 15 Jul 2023 10:22:23 -0600 Subject: [PATCH] eliminate call_with_inference_limit/3 leaks (#1300) --- src/machine/system_calls.rs | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/machine/system_calls.rs b/src/machine/system_calls.rs index 4a4965a2..d53ef79f 100644 --- a/src/machine/system_calls.rs +++ b/src/machine/system_calls.rs @@ -5263,13 +5263,17 @@ impl Machine { }; let bp = cell_as_fixnum!(a1).get_num() as usize; + let a3 = self.deref_register(3); let count = self.machine_st.cwil.add_limit(n, bp); - let count = arena_alloc!(count.clone(), &mut self.machine_st.arena); - self.machine_st.increment_call_count_fn = MachineState::increment_call_count; + if let Some(count) = count.to_i64() { + self.machine_st.unify_fixnum(Fixnum::build_with(count), a3); + } else { + let count = arena_alloc!(count.clone(), &mut self.machine_st.arena); + self.machine_st.unify_big_int(count, a3); + } - let a3 = self.deref_register(3); - self.machine_st.unify_big_int(count, a3); + self.machine_st.increment_call_count_fn = MachineState::increment_call_count; Ok(()) } @@ -5410,14 +5414,18 @@ impl Machine { #[inline(always)] pub(crate) fn remove_inference_counter(&mut self) { let a1 = self.deref_register(1); + let a2 = self.deref_register(2); + let bp = cell_as_fixnum!(a1).get_num() as usize; let count = self.machine_st.cwil.remove_limit(bp).clone(); - let count = arena_alloc!(count.clone(), &mut self.machine_st.arena); - - let a2 = self.deref_register(2); - self.machine_st.unify_big_int(count, a2); + if let Some(count) = count.to_i64() { + self.machine_st.unify_fixnum(Fixnum::build_with(count), a2); + } else { + let count = arena_alloc!(count.clone(), &mut self.machine_st.arena); + self.machine_st.unify_big_int(count, a2); + } } #[inline(always)] -- 2.54.0