aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <gingerBill@users.noreply.github.com>2022-03-09 15:05:51 +0000
committergingerBill <gingerBill@users.noreply.github.com>2022-03-09 15:05:51 +0000
commit17eebf338c7c2428db99470f8e1dd6c8d2f7ac0f (patch)
tree03304d3f40216263abe5376283df515d0417236c
parent8e4d6b3e5dde51fdd71a49b2bf703ae3428c1c21 (diff)
Fix #1606 (Call `runtime._cleanup_runtime_contextless()` for `os.exit`)
-rw-r--r--core/os/os_darwin.odin1
-rw-r--r--core/os/os_freebsd.odin1
-rw-r--r--core/os/os_linux.odin1
-rw-r--r--core/os/os_openbsd.odin2
-rw-r--r--core/os/os_wasi.odin2
-rw-r--r--core/os/os_windows.odin2
-rw-r--r--core/runtime/core.odin5
7 files changed, 14 insertions, 0 deletions
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()
+}
+
/////////////////////////////
/////////////////////////////