From d0a2c5ec40a4d3fc22a401562b31a242f27d65e7 Mon Sep 17 00:00:00 2001 From: Nunuhara Cabbage Date: Sun, 7 May 2023 15:32:29 -0700 Subject: [PATCH] Fix vm_exit when called before vm_execute_ain The can happen when launched in the debugger and then exited before starting execution. --- src/ffi.c | 6 +++++- src/vm.c | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/ffi.c b/src/ffi.c index 4aafd85..e9d0d1e 100644 --- a/src/ffi.c +++ b/src/ffi.c @@ -539,16 +539,20 @@ static void link_libraries(void) } } +bool libraries_initialized = false; + void init_libraries(void) { library_run_all("_PreLink"); link_libraries(); library_run_all("_ModuleInit"); + libraries_initialized = true; } void exit_libraries(void) { - library_run_all("_ModuleFini"); + if (libraries_initialized) + library_run_all("_ModuleFini"); } void static_library_replace(struct static_library *lib, const char *name, void *fun) diff --git a/src/vm.c b/src/vm.c index 54ad21b..807e9b8 100644 --- a/src/vm.c +++ b/src/vm.c @@ -2295,7 +2295,8 @@ static void vm_free(void) exit_unref(call_stack[i].page_slot); } // free globals - exit_unref(0); + if (heap_size > 0 && heap[0].ref > 0) + exit_unref(0); } static jmp_buf reset_buf;