From 17eebf338c7c2428db99470f8e1dd6c8d2f7ac0f Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 9 Mar 2022 15:05:51 +0000 Subject: [PATCH] Fix #1606 (Call `runtime._cleanup_runtime_contextless()` for `os.exit`) --- core/os/os_darwin.odin | 1 + core/os/os_freebsd.odin | 1 + core/os/os_linux.odin | 1 + core/os/os_openbsd.odin | 2 ++ core/os/os_wasi.odin | 2 ++ core/os/os_windows.odin | 2 ++ core/runtime/core.odin | 5 +++++ 7 files changed, 14 insertions(+) diff --git a/core/os/os_darwin.odin b/core/os/os_darwin.odin index 4365842b0..ace622582 100644 --- a/core/os/os_darwin.odin +++ b/core/os/os_darwin.odin @@ -680,6 +680,7 @@ make_directory :: proc(path: string, mode: u32 = 0o775) -> Errno { } exit :: proc "contextless" (code: int) -> ! { + runtime._cleanup_runtime_contextless() _unix_exit(i32(code)) } diff --git a/core/os/os_freebsd.odin b/core/os/os_freebsd.odin index e31eb31bb..7fb9dd26f 100644 --- a/core/os/os_freebsd.odin +++ b/core/os/os_freebsd.odin @@ -419,6 +419,7 @@ set_current_directory :: proc(path: string) -> (err: Errno) { } exit :: proc "contextless" (code: int) -> ! { + runtime._cleanup_runtime_contextless() _unix_exit(c.int(code)) } diff --git a/core/os/os_linux.odin b/core/os/os_linux.odin index 200d6d68d..9716e2925 100644 --- a/core/os/os_linux.odin +++ b/core/os/os_linux.odin @@ -802,6 +802,7 @@ set_current_directory :: proc(path: string) -> (err: Errno) { } exit :: proc "contextless" (code: int) -> ! { + runtime._cleanup_runtime_contextless() _unix_exit(c.int(code)) } diff --git a/core/os/os_openbsd.odin b/core/os/os_openbsd.odin index 3862851a1..bca93880a 100644 --- a/core/os/os_openbsd.odin +++ b/core/os/os_openbsd.odin @@ -5,6 +5,7 @@ foreign import libc "system:c" import "core:runtime" import "core:strings" import "core:c" +import "core:runtime" Handle :: distinct i32 Pid :: distinct i32 @@ -658,6 +659,7 @@ set_current_directory :: proc(path: string) -> (err: Errno) { } exit :: proc "contextless" (code: int) -> ! { + runtime._cleanup_runtime_contextless() _unix_exit(c.int(code)) } diff --git a/core/os/os_wasi.odin b/core/os/os_wasi.odin index d2ba166bd..7bab1b949 100644 --- a/core/os/os_wasi.odin +++ b/core/os/os_wasi.odin @@ -1,6 +1,7 @@ package os import "core:sys/wasm/wasi" +import "core:runtime" Handle :: distinct i32 Errno :: distinct i32 @@ -93,5 +94,6 @@ heap_free :: proc(ptr: rawptr) { exit :: proc "contextless" (code: int) -> ! { + runtime._cleanup_runtime_contextless() wasi.proc_exit(wasi.exitcode_t(code)) } \ No newline at end of file diff --git a/core/os/os_windows.odin b/core/os/os_windows.odin index e6efb89df..fe9496e4c 100644 --- a/core/os/os_windows.odin +++ b/core/os/os_windows.odin @@ -2,6 +2,7 @@ package os import win32 "core:sys/windows" +import "core:runtime" Handle :: distinct uintptr File_Time :: distinct u64 @@ -128,6 +129,7 @@ get_page_size :: proc() -> int { exit :: proc "contextless" (code: int) -> ! { + runtime._cleanup_runtime_contextless() win32.ExitProcess(win32.DWORD(code)) } diff --git a/core/runtime/core.odin b/core/runtime/core.odin index 8d315a238..08ca4c049 100644 --- a/core/runtime/core.odin +++ b/core/runtime/core.odin @@ -459,6 +459,11 @@ _cleanup_runtime :: proc() { default_temp_allocator_destroy(&global_default_temp_allocator_data) } +_cleanup_runtime_contextless :: proc "contextless" () { + context = default_context() + _cleanup_runtime() +} + ///////////////////////////// /////////////////////////////