Clemapfel / Mousetrap.jl

Finally, a GUI Engine made for Julia

Home Page:https://clemens-cords.com/mousetrap

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Crash when `using Mousetrap` is not executed in `Main` directly

socialmediarefugee opened this issue · comments

Run active file containing hello world example within VSCode causes a segmentation fault. Running program within embedded REPL does not cause segmentation fault.

UPDATE: Remove the module definition and its associated end statement and Hello World snippet performs as expected.

Perhaps its a case for the VSCode Julia debugger?

MacOS 12.7 Monterrey

[25315] signal (11.1): Segmentation fault: 11
in expression starting at /Users/dave/.vscode/extensions/julialang.language-julia-1.54.2/scripts/debugger/run_debugger.jl:10
ijl_apply_generic at /Users/dave/.julia/juliaup/julia-1.9.3+0.x64.apple.darwin14/lib/julia/libjulia-internal.1.9.dylib (unknown line)
ijl_call at /Users/dave/.julia/juliaup/julia-1.9.3+0.x64.apple.darwin14/lib/julia/libjulia-internal.1.9.dylib (unknown line)
ZL12jl_safe_callIJP11_jl_value_tEES1_PKcS1_DpT at /Users/dave/.julia/artifacts/ef0be4270dcb0de753d5b452453358cebe124d09/lib/libmousetrap_julia_binding.0.dylib (unknown line)
_ZZZ19add_signal_activateIN9mousetrap11ApplicationEN5jlcxx11TypeWrapperIS1_EEEvT0_RKNSt3__112basic_stringIcNS6_11char

UPDATE: Remove the module definition and its associated end statement and Hello World snippet performs as expected.

Could you post the full julia file you ran in vscode? I can't reproduce this.

module Child
using Mousetrap

main() do app::Application
window = Window(app)

# snippet start
button = Button()
connect_signal_clicked!(button) do self::Button
    println("Button clicked!")
end
# snippet end

set_child!(window, button) # add the button to the window
present!(window)

end
end

I'm using the "Run and debug> Run active Julia file" in VSCode

Julia: Execute Active File in REPL works as expected.

These approaches also cause a segmentation fault.
Julia: Run file in new process / Julia Debug file in new process

I can reproduce this outside VSCode, MWE and full stacktrace:

module Test
   using Mousetrap
   main() do app end
end
[80848] signal (11.1): Segmentation fault
in expression starting at REPL[1]:3
jl_lookup_generic_ at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2819 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2936
jl_apply at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/julia.h:1880 [inlined]
ijl_call at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/jlapi.c:187
jl_safe_call<_jl_value_t*> at /workspace/srcdir/mousetrap_julia_binding/build/../cpp/../mousetrap_julia_binding.hpp:39
operator() at /workspace/srcdir/mousetrap_julia_binding/build/../cpp/../mousetrap_julia_binding.hpp:305
operator() at /workspace/x86_64-linux-gnu-libgfortran5-cxx11/destdir/include/mousetrap/signal_component.hpp:254
__invoke_impl<void, mousetrap::has_signal_activate<mousetrap::Application>::connect_signal_activate<add_signal_activate<mousetrap::Application, jlcxx::TypeWrapper<mousetrap::Application> >(jlcxx::TypeWrapper<mousetrap::Application>, const std::string&)::<lambda(mousetrap::Application&, jl_function_t*)>::<lambda(mousetrap::Application&, jl_function_t*)>, _jl_value_t*>(add_signal_activate<mousetrap::Application, jlcxx::TypeWrapper<mousetrap::Application> >(jlcxx::TypeWrapper<mousetrap::Application>, const std::string&)::<lambda(mousetrap::Application&, jl_function_t*)>::<lambda(mousetrap::Application&, jl_function_t*)>, _jl_value_t*)::<lambda(void*)>&, void*> at /opt/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/12.1.0/bits/invoke.h:61
__invoke_r<void, mousetrap::has_signal_activate<mousetrap::Application>::connect_signal_activate<add_signal_activate<mousetrap::Application, jlcxx::TypeWrapper<mousetrap::Application> >(jlcxx::TypeWrapper<mousetrap::Application>, const std::string&)::<lambda(mousetrap::Application&, jl_function_t*)>::<lambda(mousetrap::Application&, jl_function_t*)>, _jl_value_t*>(add_signal_activate<mousetrap::Application, jlcxx::TypeWrapper<mousetrap::Application> >(jlcxx::TypeWrapper<mousetrap::Application>, const std::string&)::<lambda(mousetrap::Application&, jl_function_t*)>::<lambda(mousetrap::Application&, jl_function_t*)>, _jl_value_t*)::<lambda(void*)>&, void*> at /opt/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/12.1.0/bits/invoke.h:111
_M_invoke at /opt/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/12.1.0/bits/std_function.h:290
operator() at /opt/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/12.1.0/bits/std_function.h:591
wrapper at /workspace/x86_64-linux-gnu-libgfortran5-cxx11/destdir/include/mousetrap/signal_component.hpp:254
g_closure_invoke at /home/clem/.julia/artifacts/b6ebc4def1211ec4043d7c055f450d59f56747cc/lib/libgobject-2.0.so.0 (unknown line)
signal_emit_unlocked_R at /home/clem/.julia/artifacts/b6ebc4def1211ec4043d7c055f450d59f56747cc/lib/libgobject-2.0.so.0 (unknown line)
g_signal_emit_valist at /home/clem/.julia/artifacts/b6ebc4def1211ec4043d7c055f450d59f56747cc/lib/libgobject-2.0.so.0 (unknown line)
g_signal_emit at /home/clem/.julia/artifacts/b6ebc4def1211ec4043d7c055f450d59f56747cc/lib/libgobject-2.0.so.0 (unknown line)
g_application_real_local_command_line at /home/clem/.julia/artifacts/b6ebc4def1211ec4043d7c055f450d59f56747cc/lib/libgio-2.0.so (unknown line)
g_application_run at /home/clem/.julia/artifacts/b6ebc4def1211ec4043d7c055f450d59f56747cc/lib/libgio-2.0.so (unknown line)
run at /workspace/srcdir/mousetrap/build/../src/application.cpp:132
operator() at /opt/x86_64-linux-gnu/bin/../x86_64-linux-gnu/sys-root/usr/local/include/jlcxx/module.hpp:1009
__invoke_impl<int, jlcxx::TypeWrapper<mousetrap::Application>::method<int, mousetrap::Application>(const std::string&, int (mousetrap::Application::*)())::<lambda(mousetrap::Application&)>&, mousetrap::Application&> at /opt/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/12.1.0/bits/invoke.h:61
__invoke_r<int, jlcxx::TypeWrapper<mousetrap::Application>::method<int, mousetrap::Application>(const std::string&, int (mousetrap::Application::*)())::<lambda(mousetrap::Application&)>&, mousetrap::Application&> at /opt/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/12.1.0/bits/invoke.h:114
_M_invoke at /opt/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/12.1.0/bits/std_function.h:290
operator() at /opt/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/12.1.0/bits/std_function.h:591
operator() at /opt/x86_64-linux-gnu/bin/../x86_64-linux-gnu/sys-root/usr/local/include/jlcxx/module.hpp:47
apply at /opt/x86_64-linux-gnu/bin/../x86_64-linux-gnu/sys-root/usr/local/include/jlcxx/module.hpp:72
run! at /home/clem/.julia/packages/CxxWrap/VnssN/src/CxxWrap.jl:624
unknown function (ip: 0x7fd0f3f03a92)
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2940
run! at /home/clem/.julia/packages/Mousetrap/GMpiY/src/Mousetrap.jl:1499
main at /home/clem/.julia/packages/Mousetrap/GMpiY/src/Mousetrap.jl:1540 [inlined]
main at /home/clem/.julia/packages/Mousetrap/GMpiY/src/Mousetrap.jl:1526
unknown function (ip: 0x7fd0f3f031e2)
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2940
jl_apply at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/julia.h:1880 [inlined]
do_call at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:126
eval_value at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:226
eval_stmt_value at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:177 [inlined]
eval_body at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:624
jl_interpret_toplevel_thunk at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:762
jl_toplevel_eval_flex at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/toplevel.c:912
jl_eval_module_expr at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/toplevel.c:203 [inlined]
jl_toplevel_eval_flex at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/toplevel.c:715
jl_toplevel_eval_flex at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/toplevel.c:856
ijl_toplevel_eval_in at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/toplevel.c:971
eval at ./boot.jl:370 [inlined]
eval_user_input at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:153
repl_backend_loop at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:249
#start_repl_backend#46 at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:234
start_repl_backend at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:231
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2940
#run_repl#59 at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:379
run_repl at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:365
jfptr_run_repl_60908.clone_1 at /home/clem/Applications/julia-1.9.3-linux-x86_64/julia-1.9.3/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2940
#1017 at ./client.jl:421
jfptr_YY.1017_36106.clone_1 at /home/clem/Applications/julia-1.9.3-linux-x86_64/julia-1.9.3/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2940
jl_apply at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/julia.h:1880 [inlined]
jl_f__call_latest at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/builtins.c:774
#invokelatest#2 at ./essentials.jl:819 [inlined]
invokelatest at ./essentials.jl:816 [inlined]
run_main_repl at ./client.jl:405
exec_options at ./client.jl:322
_start at ./client.jl:522
jfptr__start_40034.clone_1 at /home/clem/Applications/julia-1.9.3-linux-x86_64/julia-1.9.3/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2940
jl_apply at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/julia.h:1880 [inlined]
true_main at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/jlapi.c:573
jl_repl_entrypoint at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/jlapi.c:717
main at julia (unknown line)
__libc_start_call_main at /lib64/libc.so.6 (unknown line)
__libc_start_main at /lib64/libc.so.6 (unknown line)
unknown function (ip: 0x4010b8)
Allocations: 1612859 (Pool: 1612140; Big: 719); GC: 2
Segmentation fault (core dumped)

Fixed by adding import Mousetrap outside of the module scope:

import Mousetrap # in `Main` scope
module Test
   using Mousetrap
   main() do app end
end

This is because the C++ component looks for Mousetrap classes in global scope, but they're only loaded in Test scope in the pathological cases

Reproduced on Mac using the snippet above.

Fixed by Clemapfel/mousetrap_julia_binding@179935b#r130584419

It's not live yet but it will be with 3.1

Q: Do you have access to Mac to test?