Skip to main content

luaur_code_gen/methods/
code_allocator_deallocate.rs

1use crate::functions::make_pages_not_executable_code_allocator::make_pages_not_executable;
2use crate::macros::codegen_assert::CODEGEN_ASSERT;
3use crate::records::code_allocation_data::CodeAllocationData;
4use crate::records::code_allocator::CodeAllocator;
5use luaur_common::FFlag;
6
7impl CodeAllocator {
8    pub fn deallocate(&mut self, code_allocation_data: CodeAllocationData) {
9        CODEGEN_ASSERT!(FFlag::LuauCodegenFreeBlocks.get());
10
11        if code_allocation_data.allocation_start.is_null() {
12            return;
13        }
14
15        let result = make_pages_not_executable(
16            code_allocation_data.allocation_start,
17            code_allocation_data.allocation_size,
18        );
19        CODEGEN_ASSERT!(result);
20
21        CODEGEN_ASSERT!(self.live_allocations != 0);
22        self.live_allocations -= 1;
23    }
24}