aenarete / ControlPlots.jl

Easy to use plotting for control engineers and students
MIT License
2 stars 1 forks source link

Segmentation fault when running script multiple times. #11

Closed 1-Bart-1 closed 2 months ago

1-Bart-1 commented 2 months ago

When running a script with this code twice from the julia command line, and closing the plotting window in between running the script the first time and the second time, I get the following error.

using ControlPlots
plot2d([[1,0,0], [2,0,0]], 10)
julia> include("test/controlplots.jl")

[350556] signal (11.1): Segmentation fault
in expression starting at /home/bart/Code/KiteModels.jl/test/controlplots.jl:2
Tk_GetImageMasterData at /lib/x86_64-linux-gnu/libtk8.6.so (unknown line)
Tk_FindPhoto at /lib/x86_64-linux-gnu/libtk8.6.so (unknown line)
mpl_tk_blit at /usr/src/matplotlib-3.6.3-1ubuntu5/src/_tkagg.cpp:82
unknown function (ip: 0x770af15dbe67)
_PyObject_MakeTpCall at /usr/lib/x86_64-linux-gnu/libpython3.12.so.1.0 (unknown line)
_PyEval_EvalFrameDefault at /usr/lib/x86_64-linux-gnu/libpython3.12.so.1.0 (unknown line)
unknown function (ip: 0x770b367fa2d1)
TclNRRunCallbacks at /lib/x86_64-linux-gnu/libtcl8.6.so (unknown line)
unknown function (ip: 0x770b367f9d08)
unknown function (ip: 0x770af158f96a)
PyObject_Vectorcall at /usr/lib/x86_64-linux-gnu/libpython3.12.so.1.0 (unknown line)
_PyEval_EvalFrameDefault at /usr/lib/x86_64-linux-gnu/libpython3.12.so.1.0 (unknown line)
unknown function (ip: 0x770af1586169)
unknown function (ip: 0x770b367fa2d1)
TclNRRunCallbacks at /lib/x86_64-linux-gnu/libtcl8.6.so (unknown line)
unknown function (ip: 0x770b32f74b5b)
TclServiceIdle at /lib/x86_64-linux-gnu/libtcl8.6.so (unknown line)
Tcl_DoOneEvent at /lib/x86_64-linux-gnu/libtcl8.6.so (unknown line)
unknown function (ip: 0x770b367f45f3)
_PyEval_EvalFrameDefault at /usr/lib/x86_64-linux-gnu/libpython3.12.so.1.0 (unknown line)
macro expansion at /home/bart/.julia/packages/PyCall/1gn3u/src/exception.jl:108 [inlined]
#107 at /home/bart/.julia/packages/PyCall/1gn3u/src/pyfncall.jl:43 [inlined]
disable_sigint at ./c.jl:473 [inlined]
__pycall! at /home/bart/.julia/packages/PyCall/1gn3u/src/pyfncall.jl:42 [inlined]
_pycall! at /home/bart/.julia/packages/PyCall/1gn3u/src/pyfncall.jl:29
_pycall! at /home/bart/.julia/packages/PyCall/1gn3u/src/pyfncall.jl:11 [inlined]
#pycall#113 at /home/bart/.julia/packages/PyCall/1gn3u/src/pyfncall.jl:83 [inlined]
pycall at /home/bart/.julia/packages/PyCall/1gn3u/src/pyfncall.jl:83 [inlined]
#pause#81 at /home/bart/.julia/packages/PyPlot/rWSdf/src/PyPlot.jl:194
pause at /home/bart/.julia/packages/PyPlot/rWSdf/src/PyPlot.jl:190 [inlined]
#plot2d_#7 at /home/bart/.julia/packages/ControlPlots/H8Ste/src/plot2d.jl:119
plot2d_ at /home/bart/.julia/packages/ControlPlots/H8Ste/src/plot2d.jl:1
unknown function (ip: 0x770b509231fa)
_jl_invoke at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/gf.c:3077
#8#9 at /home/bart/.julia/packages/ControlPlots/H8Ste/src/plot2d.jl:129
#8 at /home/bart/.julia/packages/ControlPlots/H8Ste/src/plot2d.jl:125
unknown function (ip: 0x770b5090645f)
_jl_invoke at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/gf.c:3077
#plot2d#12 at /home/bart/.julia/packages/ControlPlots/H8Ste/src/plot2d.jl:134
plot2d at /home/bart/.julia/packages/ControlPlots/H8Ste/src/plot2d.jl:133
unknown function (ip: 0x770b509044dc)
_jl_invoke at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/gf.c:3077
jl_apply at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]
do_call at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/interpreter.c:126
eval_value at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/interpreter.c:223
eval_stmt_value at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/interpreter.c:174 [inlined]
eval_body at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/interpreter.c:617
jl_interpret_toplevel_thunk at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/interpreter.c:775
jl_toplevel_eval_flex at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/toplevel.c:934
jl_toplevel_eval_flex at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/toplevel.c:877
ijl_toplevel_eval_in at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/toplevel.c:985
eval at ./boot.jl:385 [inlined]
include_string at ./loading.jl:2076
_jl_invoke at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/gf.c:3077
_include at ./loading.jl:2136
include at ./client.jl:489
unknown function (ip: 0x770b509015e5)
_jl_invoke at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/gf.c:3077
jl_apply at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]
do_call at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/interpreter.c:126
eval_value at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/interpreter.c:223
eval_stmt_value at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/interpreter.c:174 [inlined]
eval_body at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/interpreter.c:617
jl_interpret_toplevel_thunk at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/interpreter.c:775
jl_toplevel_eval_flex at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/toplevel.c:934
jl_toplevel_eval_flex at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/toplevel.c:877
ijl_toplevel_eval_in at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/toplevel.c:985
eval at ./boot.jl:385 [inlined]
eval_user_input at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:150
repl_backend_loop at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:246
#start_repl_backend#46 at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:231
start_repl_backend at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:228
_jl_invoke at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/gf.c:3077
#run_repl#59 at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:389
run_repl at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:375
jfptr_run_repl_91737.1 at /home/bart/.julia/juliaup/julia-1.10.4+0.x64.linux.gnu/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/gf.c:3077
#1013 at ./client.jl:432
jfptr_YY.1013_82703.1 at /home/bart/.julia/juliaup/julia-1.10.4+0.x64.linux.gnu/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/gf.c:3077
jl_apply at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]
jl_f__call_latest at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/builtins.c:812
#invokelatest#2 at ./essentials.jl:892 [inlined]
invokelatest at ./essentials.jl:889 [inlined]
run_main_repl at ./client.jl:416
exec_options at ./client.jl:333
_start at ./client.jl:552
jfptr__start_82729.1 at /home/bart/.julia/juliaup/julia-1.10.4+0.x64.linux.gnu/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/gf.c:3077
jl_apply at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]
true_main at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/jlapi.c:582
jl_repl_entrypoint at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/src/jlapi.c:731
main at /cache/build/builder-amdci4-0/julialang/julia-release-1-dot-10/cli/loader_exe.c:58
unknown function (ip: 0x770b5102a1c9)
__libc_start_main at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
unknown function (ip: 0x4010b8)
Allocations: 2476870 (Pool: 2474462; Big: 2408); GC: 4
zsh: segmentation fault (core dumped)  julia --project=.

The version of ControlPlots I am using: ControlPlots v0.1.3

But the older version of ControlPlots (v0.0.12) had the same result.

Systeminfo: OS: Kubuntu 24.04 LTS x86_64 CPU: Intel i9-9980HK

ufechner7 commented 2 months ago

This is interesting. I added the example mwe04.jl to reproduce the issue.

It must be related to the fact that I use a closure to keep the last points and lines stored, and when calling this function a second time only the positions get updated. And if you close the window the point and line objects do not continue to exist any more.

But why does this problem not appear if I run for example Tethers_07.jl from the Tethers.jl repo?

ufechner7 commented 2 months ago

OK, I see the reason: If you start a new 2D video sequence you must start it with t=0. Only then the line and dot and text objects are re-created. I would say this is OK, it just must be documented.

ufechner7 commented 2 months ago

Add an example and some documentation to README.md