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;