Segfault when plotting to axis of closed figure
還沒有人認領這個 Issue。
評估
- 難度
- 4/5
- 預估耗時
- 3-5 天
- 新手友好度
- 35/100
- Issue 類型
- 缺陷
- 描述清晰度
- 基本清楚
- 活躍度
- 停滯
研究方向
首先使用 PythonPlot v1.0.2 和 issue 中的 Julia 範例重現已關閉 figure 的情境。接著檢查 src/pygui.jl 第 199 行附近的 PythonPlot GUI 處理邏輯,以及 trace 中顯示的 matplotlib/Tk 堆疊。完成的標準是:向已關閉的 figure 繪圖不再導致 segmentation fault,而是安全地執行;如果該操作不受支援,最好擲出錯誤。
由索引模型根據 Issue 內容生成。
描述
If we attempt to plot to the axis of a figure that has already been displayed and closed, then on my machine Juliaa segfaults.
julia> fig, ax = subplots() # opens plot window, leave open
Python: (<Figure size 640x480 with 1 Axes>, <Axes: >)
julia> ax.scatter(randn(10), randn(10)) # adds plot to window
Python: <matplotlib.collections.PathCollection object at 0x7f0df059df50>
Then close the opened plot window and run the following, which causes the segfault.
julia> ax.scatter(randn(10), randn(10))
Python: <matplotlib.collections.PathCollection object at 0x7f0df19db050>
julia>
[306116] signal (11.1): Segmentation fault
in expression starting at none:0
Tk_GetImageMasterData at /tmp/jl_GaEsxY/.CondaPkg/env/lib/python3.11/lib-dynload/../../libtk8.6.so (unknown line)
Tk_FindPhoto at /tmp/jl_GaEsxY/.CondaPkg/env/lib/python3.11/lib-dynload/../../libtk8.6.so (unknown line)
_ZL11mpl_tk_blitP7_objectS0_ at /tmp/jl_GaEsxY/.CondaPkg/env/lib/python3.11/site-packages/matplotlib/backends/_tkagg.cpython-311-x86_64-linux-gnu.so (unknown line)
cfunction_call at /usr/local/src/conda/python-3.11.4/Objects/methodobject.c:553
_PyObject_MakeTpCall at /usr/local/src/conda/python-3.11.4/Objects/call.c:214
_PyEval_EvalFrameDefault at /usr/local/src/conda/python-3.11.4/Python/ceval.c:4774
_PyEval_EvalFrame at /usr/local/src/conda/python-3.11.4/Include/internal/pycore_ceval.h:73 [inlined]
_PyEval_Vector at /usr/local/src/conda/python-3.11.4/Python/ceval.c:6439 [inlined]
_PyFunction_Vectorcall at /usr/local/src/conda/python-3.11.4/Objects/call.c:393
PythonCmd at /usr/local/src/conda/python-3.11.4/Modules/_tkinter.c:2252
TclNRRunCallbacks at /tmp/jl_GaEsxY/.CondaPkg/env/lib/python3.11/lib-dynload/../../libtcl8.6.so (unknown line)
Tkapp_Call at /usr/local/src/conda/python-3.11.4/Modules/_tkinter.c:1462
method_vectorcall_VARARGS at /usr/local/src/conda/python-3.11.4/Objects/descrobject.c:330
_PyObject_VectorcallTstate at /usr/local/src/conda/python-3.11.4/Include/internal/pycore_call.h:92 [inlined]
PyObject_Vectorcall at /usr/local/src/conda/python-3.11.4/Objects/call.c:299
_PyEval_EvalFrameDefault at /usr/local/src/conda/python-3.11.4/Python/ceval.c:4774
_PyEval_EvalFrame at /usr/local/src/conda/python-3.11.4/Include/internal/pycore_ceval.h:73 [inlined]
_PyEval_Vector at /usr/local/src/conda/python-3.11.4/Python/ceval.c:6439 [inlined]
_PyFunction_Vectorcall at /usr/local/src/conda/python-3.11.4/Objects/call.c:393
do_call_core at /usr/local/src/conda/python-3.11.4/Python/ceval.c:7357 [inlined]
_PyEval_EvalFrameDefault at /usr/local/src/conda/python-3.11.4/Python/ceval.c:5381
_PyEval_EvalFrame at /usr/local/src/conda/python-3.11.4/Include/internal/pycore_ceval.h:73 [inlined]
_PyEval_Vector at /usr/local/src/conda/python-3.11.4/Python/ceval.c:6439 [inlined]
_PyFunction_Vectorcall at /usr/local/src/conda/python-3.11.4/Objects/call.c:393
do_call_core at /usr/local/src/conda/python-3.11.4/Python/ceval.c:7357 [inlined]
_PyEval_EvalFrameDefault at /usr/local/src/conda/python-3.11.4/Python/ceval.c:5381
_PyEval_EvalFrame at /usr/local/src/conda/python-3.11.4/Include/internal/pycore_ceval.h:73 [inlined]
_PyEval_Vector at /usr/local/src/conda/python-3.11.4/Python/ceval.c:6439 [inlined]
_PyFunction_Vectorcall at /usr/local/src/conda/python-3.11.4/Objects/call.c:393 [inlined]
_PyObject_VectorcallTstate at /usr/local/src/conda/python-3.11.4/Include/internal/pycore_call.h:92
method_vectorcall at /usr/local/src/conda/python-3.11.4/Objects/classobject.c:67
PythonCmd at /usr/local/src/conda/python-3.11.4/Modules/_tkinter.c:2252
TclNRRunCallbacks at /tmp/jl_GaEsxY/.CondaPkg/env/lib/python3.11/lib-dynload/../../libtcl8.6.so (unknown line)
AfterProc at /tmp/jl_GaEsxY/.CondaPkg/env/lib/python3.11/lib-dynload/../../libtcl8.6.so (unknown line)
TclServiceIdle at /tmp/jl_GaEsxY/.CondaPkg/env/lib/python3.11/lib-dynload/../../libtcl8.6.so (unknown line)
Tcl_DoOneEvent at /tmp/jl_GaEsxY/.CondaPkg/env/lib/python3.11/lib-dynload/../../libtcl8.6.so (unknown line)
_tkinter_tkapp_dooneevent_impl at /usr/local/src/conda/python-3.11.4/Modules/_tkinter.c:2785 [inlined]
_tkinter_tkapp_dooneevent at /usr/local/src/conda/python-3.11.4/Modules/clinic/_tkinter.c.h:566
cfunction_vectorcall_FASTCALL at /usr/local/src/conda/python-3.11.4/Objects/methodobject.c:427
PyObject_CallObject at /home/sethaxen/.julia/packages/PythonCall/qTEA1/src/cpython/pointers.jl:299 [inlined]
macro expansion at /home/sethaxen/.julia/packages/PythonCall/qTEA1/src/Py.jl:131 [inlined]
pycallargs at /home/sethaxen/.julia/packages/PythonCall/qTEA1/src/abstract/object.jl:210
unknown function (ip: 0x7f4b801c1ea6)
_jl_invoke at /cache/build/default-amdci5-2/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-2/julialang/julia-release-1-dot-9/src/gf.c:2940
#pycall#59 at /home/sethaxen/.julia/packages/PythonCall/qTEA1/src/abstract/object.jl:228
_jl_invoke at /cache/build/default-amdci5-2/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-2/julialang/julia-release-1-dot-9/src/gf.c:2940
jl_apply at /cache/build/default-amdci5-2/julialang/julia-release-1-dot-9/src/julia.h:1879 [inlined]
do_apply at /cache/build/default-amdci5-2/julialang/julia-release-1-dot-9/src/builtins.c:730
pycall at /home/sethaxen/.julia/packages/PythonCall/qTEA1/src/abstract/object.jl:218
_jl_invoke at /cache/build/default-amdci5-2/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-2/julialang/julia-release-1-dot-9/src/gf.c:2940
jl_apply at /cache/build/default-amdci5-2/julialang/julia-release-1-dot-9/src/julia.h:1879 [inlined]
do_apply at /cache/build/default-amdci5-2/julialang/julia-release-1-dot-9/src/builtins.c:730
#_#11 at /home/sethaxen/.julia/packages/PythonCall/qTEA1/src/Py.jl:341
_jl_invoke at /cache/build/default-amdci5-2/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-2/julialang/julia-release-1-dot-9/src/gf.c:2940
jl_apply at /cache/build/default-amdci5-2/julialang/julia-release-1-dot-9/src/julia.h:1879 [inlined]
do_apply at /cache/build/default-amdci5-2/julialang/julia-release-1-dot-9/src/builtins.c:730
Py at /home/sethaxen/.julia/packages/PythonCall/qTEA1/src/Py.jl:341
_jl_invoke at /cache/build/default-amdci5-2/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-2/julialang/julia-release-1-dot-9/src/gf.c:2940
#9 at /home/sethaxen/.julia/packages/PythonPlot/f591M/src/pygui.jl:199
macro expansion at ./asyncevent.jl:281 [inlined]
#702 at ./task.jl:134
unknown function (ip: 0x7f4b801d59df)
_jl_invoke at /cache/build/default-amdci5-2/julialang/julia-release-1-dot-9/src/gf.c:2758 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-2/julialang/julia-release-1-dot-9/src/gf.c:2940
jl_apply at /cache/build/default-amdci5-2/julialang/julia-release-1-dot-9/src/julia.h:1879 [inlined]
start_task at /cache/build/default-amdci5-2/julialang/julia-release-1-dot-9/src/task.c:1092
Allocations: 10747647 (Pool: 10739903; Big: 7744); GC: 15
Segmentation fault (core dumped)
If plotting to this axis is not supported, it would be much better to throw an error.
Environment
julia> versioninfo()
Julia Version 1.9.2
Commit e4ee485e909 (2023-07-05 09:39 UTC)
Platform Info:
OS: Linux (x86_64-linux-gnu)
CPU: 8 × 11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-14.0.6 (ORCJIT, tigerlake)
Threads: 8 on 8 virtual cores
Environment:
JULIA_CMDSTAN_HOME = /home/sethaxen/software/cmdstan/2.30.1/
JULIA_NUM_THREADS = auto
JULIA_EDITOR = code
(jl_jbDJBf) pkg> st
Status `/tmp/jl_jbDJBf/Project.toml`
[274fc56d] PythonPlot v1.0.2
- 主要語言
- Julia
- 星號
- 85
- 分支
- 9
- PR 合併指標
- 30 天內沒有已合併 PR
環境準備
這個專案沒有提供開發容器、Dockerfile 或貢獻指南,環境需要你自己搭建:先看它的 README,通用步驟見我們的新手貢獻指南。
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
JuliaPy/PythonPlot.jl 的其他 Issue
-
難度 4/5 3-5 天 新手友好度 38/100
JuliaPy/PythonPlot.jl#55 · 3 則留言 ·
-
難度 3/5 1-2 天 新手友好度 45/100
JuliaPy/PythonPlot.jl#54 ·
-
難度 3/5 1-2 天 新手友好度 45/100
JuliaPy/PythonPlot.jl#53 ·
-
難度 1/5 1 小時以內 新手友好度 35/100
JuliaPy/PythonPlot.jl#52 · 2 個 reaction ·
-
難度 4/5 3-5 天 新手友好度 20/100
JuliaPy/PythonPlot.jl#51 ·
查看 JuliaPy/PythonPlot.jl 的全部 Issue
相似的 Issue
-
難度 2/5 1-3 小時 新手友好度 78/100
維護者通常 1 天內回覆
-
Segfault on x86_64 with AVX: over-aligned vector store可能已有人在做 @vchuravy 今天認領。 未關閉
難度 2/5 1-3 小時 新手友好度 88/100
EnzymeAD/Enzyme.jl#3775 · 1 則留言 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 82/100
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 78/100
Sienna-Platform/PowerSystemCaseBuilder.jl#239 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 72/100
JuliaPluto/Malt.jl#114 ·