Fix memory leak of constant by no longer needing to make copy of constant.

This commit is contained in:
Jesse Brault 2024-12-29 10:23:16 -06:00
parent cf0c44e627
commit 5322e441c5

View File

@ -367,23 +367,11 @@ pub fn run_byte_code(state: &mut DvmState, context: &DvmContext, byte_code: &[u8
};
let constant = lib.constants.get(const_id).unwrap();
let DmConstant::String(s) = constant;
// Alloc memory for constant
let size = s.len();
let layout = Layout::from_size_align(size, 1).unwrap();
let raw_pointer = unsafe { alloc(layout) };
// Move constant to memory
let bytes = s.as_bytes();
for i in 0..size {
unsafe {
raw_pointer.add(i).write(bytes[i]);
}
}
let pointer = s.as_ptr();
// Store the pointer metadata in target registers.
state.registers[address_register] = DvmValue::USize(raw_pointer as usize);
state.registers[size_register] = DvmValue::USize(size);
state.registers[address_register] = DvmValue::USize(pointer as usize);
state.registers[size_register] = DvmValue::USize(s.len());
}
ALLOC_RAW => {
// Allocates a raw number of bytes, with the number of bytes determined by the value