Skip to content

SymPy.jl not threadsafe? #431

@jamblejoe

Description

@jamblejoe

While working with polynomials in SymPy.jl I encountered segfaults when using Julia threads. MWE:

julia> using SymPy

julia> @syms a
(a,)

julia> p = sympy.Poly(a^2 + 3*a -2, a)
Poly(a**2 + 3*a - 2, a, domain='ZZ')

julia> for i in 0:2; @show p.coeff_monomial(a^i); end
p.coeff_monomial(a ^ i) = -2
p.coeff_monomial(a ^ i) = 3
p.coeff_monomial(a ^ i) = 1

julia> Threads.@threads for i in 0:2; @show p.coeff_monomial(a^i); end

signal (11): Segmentation fault
in expression starting at REPL[12]:1

signal (11): Segmentation fault
in expression starting at REPL[12]:1
PyObject_GC_Del at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyEval_EvalFrameDefault at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyEval_EvalCodeWithName at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyFunction_Vectorcall at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyObject_Malloc at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyObject_GC_Malloc at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
call_function at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyObject_GC_New at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyEval_EvalFrameDefault at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyTraceBack_FromFrame at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyEval_EvalCodeWithName at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
PyTraceBack_Here at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyFunction_Vectorcall at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyEval_EvalFrameDefault at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyObject_FastCallDict at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyEval_EvalCodeWithName at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyObject_Call_Prepend at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyFunction_Vectorcall at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
call_function at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
slot_tp_init at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyEval_EvalFrameDefault at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
function_code_fastcall at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
type_call.lto_priv.242 at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyObject_MakeTpCall at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
call_function at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyEval_EvalFrameDefault at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
call_function at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyEval_EvalFrameDefault at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyEval_EvalCodeWithName at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyFunction_Vectorcall at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
function_code_fastcall at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyObject_FastCall_Prepend at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
call_function at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyEval_EvalFrameDefault at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyEval_EvalCodeWithName at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyFunction_Vectorcall at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
slot_tp_richcompare at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
PyObject_RichCompare at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
PyObject_RichCompareBool at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
call_function at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyEval_EvalFrameDefault at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyEval_EvalCodeWithName at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyFunction_Vectorcall at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyObject_FastCallDict at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyObject_Call_Prepend at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
tuplerichcompare.lto_priv.211 at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
PyObject_RichCompare at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyEval_EvalFrameDefault at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
slot_tp_init at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
function_code_fastcall at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
type_call.lto_priv.242 at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyObject_MakeTpCall at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
method_vectorcall at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
call_function at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyEval_EvalFrameDefault at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
call_function at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyEval_EvalFrameDefault at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyEval_EvalCodeWithName at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyFunction_Vectorcall at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
function_code_fastcall at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
call_function at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyEval_EvalFrameDefault at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyEval_EvalCodeWithName at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyFunction_Vectorcall at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyObject_FastCallDict at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
method_vectorcall at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyObject_Call_Prepend at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
PyVectorcall_Call at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
macro expansion at /home/goran/.julia/packages/PyCall/BD546/src/exception.jl:95 [inlined]
#107 at /home/goran/.julia/packages/PyCall/BD546/src/pyfncall.jl:43 [inlined]
disable_sigint at ./c.jl:458 [inlined]
__pycall! at /home/goran/.julia/packages/PyCall/BD546/src/pyfncall.jl:42 [inlined]
_pycall! at /home/goran/.julia/packages/PyCall/BD546/src/pyfncall.jl:29
_pycall! at /home/goran/.julia/packages/PyCall/BD546/src/pyfncall.jl:11
unknown function (ip: 0x7f8fd7194263)
_jl_invoke at /buildworker/worker/package_linux64/build/src/gf.c:2237 [inlined]
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2419
#_#114 at /home/goran/.julia/packages/PyCall/BD546/src/pyfncall.jl:86
_jl_invoke at /buildworker/worker/package_linux64/build/src/gf.c:2237 [inlined]
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2419
slot_tp_init at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
jl_apply at /buildworker/worker/package_linux64/build/src/julia.h:1703 [inlined]
do_apply at /buildworker/worker/package_linux64/build/src/builtins.c:670
PyObject at /home/goran/.julia/packages/PyCall/BD546/src/pyfncall.jl:86
_jl_invoke at /buildworker/worker/package_linux64/build/src/gf.c:2237 [inlined]
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2419
macro expansion at ./show.jl:955 [inlined]
macro expansion at ./REPL[12]:1 [inlined]
#21#threadsfor_fun at ./threadingconstructs.jl:81
#21#threadsfor_fun at ./threadingconstructs.jl:48
unknown function (ip: 0x7f8fd719616c)
_jl_invoke at /buildworker/worker/package_linux64/build/src/gf.c:2237 [inlined]
type_call.lto_priv.242 at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2419
_PyObject_MakeTpCall at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
jl_apply at /buildworker/worker/package_linux64/build/src/julia.h:1703 [inlined]
call_function at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
start_task at /buildworker/worker/package_linux64/build/src/task.c:839
_PyEval_EvalFrameDefault at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyEval_EvalCodeWithName at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
_PyFunction_Vectorcall at /home/goran/.julia/conda/3/lib/libpython3.8.so.1.0 (unknown line)
unknown function (ip: (nil))
Allocations: 9128275 (Pool: 9125487; Big: 2788); GC: 11
Segmentation fault

Is this only problematic with some functions or is SymPy.jl in general not threadsafe?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions