diff --git a/module/fib.cpp b/module/fib.cpp index 8d1d69e..68e7264 100644 --- a/module/fib.cpp +++ b/module/fib.cpp @@ -47,6 +47,9 @@ struct ghost_obj { var test_string = nil; }; +// if the dynamic library is closed, the pointer of this function will be unsafe +// make sure gc deletes the object before closing the dynamic library +// or just do not close the dynamic library... void ghost_for_test_destructor(void* ptr) { std::cout << "ghost_for_test::destructor (0x"; std::cout << std::hex << reinterpret_cast(ptr) << std::dec << ") {\n"; @@ -69,7 +72,7 @@ var create_new_ghost(var* args, usize size, gc* ngc) { var res = ngc->alloc(vm_type::vm_ghost); res.ghost().set( ghost_for_test, - nullptr, + ghost_for_test_destructor, ghost_for_test_gc_marker, new ghost_obj ); diff --git a/test/module_test.nas b/test/module_test.nas index 5eec70c..39df4f4 100644 --- a/test/module_test.nas +++ b/test/module_test.nas @@ -53,10 +53,10 @@ println("[time ] ", tm.elapsedMSec()," ms"); tm.stamp(); println("[result] ", libfib.qfib(35)); println("[time ] ", tm.elapsedMSec()," ms"); -libfib.close(); +# libfib.close(); println("[result] ", libfib.fib(35)); println("[result] ", libfib.qfib(35)); -libfib.close(); +# libfib.close(); var speed_test = func() { var d = dylib.dlopen("libfib."~(os.platform()=="windows"? "dll":"so"));