core icon indicating copy to clipboard operation
core copied to clipboard

Segmentation fault + memory leaks in rust loader

Open viferga opened this issue 1 year ago • 2 comments

🐛 Bug Report

When running with valgrind (because sanitizer is not giving me stack traces):

LOADER_LIBRARY_PATH=/metacall-core/build LOADER_SCRIPT_PATH=/metacall-core/build/scripts CONFIGURATION_PATH=/metacall-core/build/configurations/global.json SERIAL_LIBRARY_PATH=/metacall-core/build DETOUR_LIBRARY_PATH=/metacall-core/build PORT_LIBRARY_PATH=/metacall-core/build RUST_BACKTRACE=1 RUST_LOG=INFO valgrind --leak-check=full --tool=memcheck ./metacall-rust-testd

I get this: valgrind.txt

I have added this line: https://github.com/metacall/core/blob/434836813427bdfc8adb4c376662aaa9997eaf1c/source/loaders/rs_loader/rust/src/lifecycle/destroy.rs#L9

It is necessary, it reduces the amount of leaks but generates a segmentation fault. It must be reviewed.

@MediosZ

viferga avatar Jul 21 '22 00:07 viferga

Here's the stack trace.

34: ==2034831==ERROR: AddressSanitizer: SEGV on unknown address 0x7f2afd9fc150 (pc 0x7f2afd0c009b bp 0x7fff25932f10 sp 0x7fff25932dd0 T0)
34: ==2034831==The signal is caused by a READ memory access.
34:     #0 0x7f2afd0c009a in alloc::sync::Arc$LT$T$GT$::get_mut_unchecked::hc0eedccc5e2fbb5e /rustc/532d2b14c05f9bc20b2d27cbb5f4550d28343a36/library/alloc/src/sync.rs
34:     #1 0x7f2afd0c0c13 in alloc::sync::Arc$LT$T$GT$::drop_slow::hcdddc1345ba6db32 /rustc/532d2b14c05f9bc20b2d27cbb5f4550d28343a36/library/alloc/src/sync.rs:1079
34:     #2 0x7f2afd039a82 in _$LT$alloc..sync..Arc$LT$T$GT$$u20$as$u20$core..ops..drop..Drop$GT$::drop::h6d67c4b2876df72f /rustc/532d2b14c05f9bc20b2d27cbb5f4550d28343a36/library/alloc/src/sync.rs:1640
34:     #3 0x7f2afcff19ea in core::ptr::drop_in_place$LT$alloc..sync..Arc$LT$dyn$u20$core..ops..function..Fn$LT$$LP$alloc..vec..Vec$LT$$BP$mut$u20$core..ffi..c_void$GT$$C$$RP$$GT$$u2b$Output$u20$$u3d$$u20$core..result..Result$LT$$BP$mut$u20$core..ffi..c_void$C$i32$GT$$u2b$core..marker..Send$u2b$core..marker..Sync$GT$$GT$::h6d25a359803075a7 /rustc/532d2b14c05f9bc20b2d27cbb5f4550d28343a36/library/core/src/ptr/mod.rs:188
34:     #4 0x7f2afd0237ba in core::ptr::drop_in_place$LT$compiler..wrapper..class..NormalFunction$GT$::hab1a96f39247ec72 /rustc/532d2b14c05f9bc20b2d27cbb5f4550d28343a36/library/core/src/ptr/mod.rs:188
34:     #5 0x7f2afd0309f9 in core::ptr::drop_in_place$LT$alloc..boxed..Box$LT$compiler..wrapper..class..NormalFunction$GT$$GT$::haf6fcd7285a0efc5 /rustc/532d2b14c05f9bc20b2d27cbb5f4550d28343a36/library/core/src/ptr/mod.rs:188
34:     #6 0x7f2afcfc867d in core::mem::drop::h97464a221d5106ed /rustc/532d2b14c05f9bc20b2d27cbb5f4550d28343a36/library/core/src/mem/mod.rs:909
34:     #7 0x7f2afd2124e3 in function_singleton_destroy compiler/src/api/function.rs:66
34:     #8 0x7f2b01f42778 in function_destroy /home/tric/codebase/metacall/source/reflect/source/reflect_function.c:669
34:     #9 0x7f2b01f58aeb in value_type_destroy /home/tric/codebase/metacall/source/reflect/source/reflect_value_type.c:665
34:     #10 0x7f2b01f50cab in scope_destroy_cb_iterate /home/tric/codebase/metacall/source/reflect/source/reflect_scope.c:603
34:     #11 0x7f2b01f24522 in set_iterate /home/tric/codebase/metacall/source/adt/source/adt_set.c:410
34:     #12 0x7f2b01f53f27 in scope_destroy /home/tric/codebase/metacall/source/reflect/source/reflect_scope.c:615
34:     #13 0x7f2b01f5459a in context_destroy /home/tric/codebase/metacall/source/reflect/source/reflect_context.c:104
34:     #14 0x7f2b01f61ee1 in loader_impl_destroy_handle /home/tric/codebase/metacall/source/loader/source/loader_impl.c:596
34:     #15 0x7f2b01f6275b in loader_impl_destroy_handle_map_cb_iterate /home/tric/codebase/metacall/source/loader/source/loader_impl.c:1279
34:     #16 0x7f2b01f24522 in set_iterate /home/tric/codebase/metacall/source/adt/source/adt_set.c:410
34:     #17 0x7f2b01f686f4 in loader_impl_destroy_objects /home/tric/codebase/metacall/source/loader/source/loader_impl.c:1315
34:     #18 0x7f2b01f686f4 in loader_impl_destroy_objects /home/tric/codebase/metacall/source/loader/source/loader_impl.c:1303
34:     #19 0x7f2b01f6019a in loader_unload_children /home/tric/codebase/metacall/source/loader/source/loader.c:710
34:     #20 0x7f2afd0ffc0a in compiler::api::loader_lifecycle_unload_children::h4ff3680358197aea compiler/src/api/mod.rs:131
34:     #21 0x7f2afcf77816 in rs_loader_impl_destroy src/lifecycle/destroy.rs:9
34:     #22 0x7f2b01f68ad2 in loader_impl_destroy /home/tric/codebase/metacall/source/loader/source/loader_impl.c:1357
34:     #23 0x7f2b01f68c50 in loader_impl_destroy_dtor /home/tric/codebase/metacall/source/loader/source/loader_impl.c:1342
34:     #24 0x7f2b01f397d1 in plugin_destroy_delayed /home/tric/codebase/metacall/source/plugin/source/plugin_impl.c:110
34:     #25 0x7f2b01f600ba in loader_unload_children /home/tric/codebase/metacall/source/loader/source/loader.c:691
34:     #26 0x7f2b01f605dd in loader_destroy /home/tric/codebase/metacall/source/loader/source/loader.c:737
34:     #27 0x7f2b01f77aa0 in metacall_destroy /home/tric/codebase/metacall/source/metacall/source/metacall.c:2155
34:     #28 0x5647a60b138a in metacall_rust_test_DefaultConstructor_Test::TestBody() /home/tric/codebase/metacall/source/tests/metacall_rust_test/source/metacall_rust_test.cpp:172

This may be caused by this line. https://github.com/metacall/core/blob/434836813427bdfc8adb4c376662aaa9997eaf1c/source/loaders/rs_loader/rust/compiler/src/api/function.rs#L66

The whole log: rust_test.log

MediosZ avatar Jul 21 '22 06:07 MediosZ

After comment out those two lines, the seg fault goes away but there are still leaks. the log: rust_test.log

MediosZ avatar Jul 21 '22 07:07 MediosZ