#10113: Calling seed() incorrectly causes Sage to crash with SIGSEGV
(Segmentation
Fault)
----------------------------+-----------------------------------------------
Reporter: drkirkby | Owner: jason
Type: defect | Status: new
Priority: major | Milestone: sage-5.0
Component: misc | Resolution:
Keywords: | Work issues:
Report Upstream: N/A | Reviewers:
Authors: | Merged in:
Dependencies: | Stopgaps:
----------------------------+-----------------------------------------------
Comment (by SimonKing):
The backtrace from the ticket description is not very clear (all those
question marks). Here is more information:
{{{
sage: seed(1,2)
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff218ae64 in __gmp_randclear ()
from
/mnt/local/king/SAGE/experiment/notebook/sage-5.1.notebook/local/lib/libgmp.so.8
(gdb) bt
#0 0x00007ffff218ae64 in __gmp_randclear ()
from
/mnt/local/king/SAGE/experiment/notebook/sage-5.1.notebook/local/lib/libgmp.so.8
#1 0x00007ffff260fa79 in
__pyx_pf_4sage_4misc_9randstate_9randstate_12__dealloc__ (o=0x4891050)
at sage/misc/randstate.c:3177
#2 __pyx_tp_dealloc_4sage_4misc_9randstate_randstate (o=0x4891050) at
sage/misc/randstate.c:3814
#3 0x00007ffff7ab240c in type_call (type=<value optimized out>,
args=0x4880878, kwds=0x0)
at Objects/typeobject.c:738
#4 0x00007ffff7a4f303 in PyObject_Call (func=0x7ffff28224c0,
arg=0x7fffffffc370, kw=0x7fffffffc368)
at Objects/abstract.c:2529
#5 0x00007ffff7aff2af in do_call (f=0x4978ac0, throwflag=<value optimized
out>) at Python/ceval.c:4231
#6 call_function (f=0x4978ac0, throwflag=<value optimized out>) at
Python/ceval.c:4036
#7 PyEval_EvalFrameEx (f=0x4978ac0, throwflag=<value optimized out>) at
Python/ceval.c:2666
#8 0x00007ffff7b01928 in PyEval_EvalCodeEx (co=0x4820d30, globals=<value
optimized out>,
locals=<value optimized out>, args=0x0, argcount=77043152, kws=<value
optimized out>, kwcount=0,
defs=0x0, defcount=0, closure=0x0) at Python/ceval.c:3253
#9 0x00007ffff7b01a42 in PyEval_EvalCode (co=0x4891068,
globals=0x7fffffffc370, locals=0x7fffffffc368)
at Python/ceval.c:667
#10 0x00007ffff7b0065a in exec_statement (f=0x4367090, throwflag=<value
optimized out>) at Python/ceval.c:4710
#11 PyEval_EvalFrameEx (f=0x4367090, throwflag=<value optimized out>) at
Python/ceval.c:1880
#12 0x00007ffff7b01928 in PyEval_EvalCodeEx (co=0xabaeb0, globals=<value
optimized out>,
locals=<value optimized out>, args=0x43669e0, argcount=77043152,
kws=<value optimized out>, kwcount=0,
defs=0x0, defcount=0, closure=0x0) at Python/ceval.c:3253
#13 0x00007ffff7affdf8 in fast_function (f=0x4366840, throwflag=<value
optimized out>) at Python/ceval.c:4109
#14 call_function (f=0x4366840, throwflag=<value optimized out>) at
Python/ceval.c:4034
#15 PyEval_EvalFrameEx (f=0x4366840, throwflag=<value optimized out>) at
Python/ceval.c:2666
#16 0x00007ffff7b01928 in PyEval_EvalCodeEx (co=0xabae30, globals=<value
optimized out>,
locals=<value optimized out>, args=0x4, argcount=77043152, kws=<value
optimized out>, kwcount=0,
defs=0xb1d260, defcount=2, closure=0x0) at Python/ceval.c:3253
#17 0x00007ffff7affdf8 in fast_function (f=0x48d1ba0, throwflag=<value
optimized out>) at Python/ceval.c:4109
#18 call_function (f=0x48d1ba0, throwflag=<value optimized out>) at
Python/ceval.c:4034
#19 PyEval_EvalFrameEx (f=0x48d1ba0, throwflag=<value optimized out>) at
Python/ceval.c:2666
#20 0x00007ffff7b0103a in fast_function (f=0xb8e2d0, throwflag=<value
optimized out>) at Python/ceval.c:4099
#21 call_function (f=0xb8e2d0, throwflag=<value optimized out>) at
Python/ceval.c:4034
#22 PyEval_EvalFrameEx (f=0xb8e2d0, throwflag=<value optimized out>) at
Python/ceval.c:2666
#23 0x00007ffff7b01928 in PyEval_EvalCodeEx (co=0xaba9b0, globals=<value
optimized out>,
locals=<value optimized out>, args=0xb85508, argcount=77043152,
kws=<value optimized out>, kwcount=0,
defs=0xb1e3e8, defcount=1, closure=0x0) at Python/ceval.c:3253
#24 0x00007ffff7affdf8 in fast_function (f=0xb85380, throwflag=<value
optimized out>) at Python/ceval.c:4109
#25 call_function (f=0xb85380, throwflag=<value optimized out>) at
Python/ceval.c:4034
#26 PyEval_EvalFrameEx (f=0xb85380, throwflag=<value optimized out>) at
Python/ceval.c:2666
#27 0x00007ffff7b01928 in PyEval_EvalCodeEx (co=0xaba530, globals=<value
optimized out>,
locals=<value optimized out>, args=0x680a60, argcount=77043152,
kws=<value optimized out>, kwcount=0,
defs=0xb1e3a8, defcount=1, closure=0x0) at Python/ceval.c:3253
#28 0x00007ffff7affdf8 in fast_function (f=0x6808d0, throwflag=<value
optimized out>) at Python/ceval.c:4109
#29 call_function (f=0x6808d0, throwflag=<value optimized out>) at
Python/ceval.c:4034
#30 PyEval_EvalFrameEx (f=0x6808d0, throwflag=<value optimized out>) at
Python/ceval.c:2666
#31 0x00007ffff7b01928 in PyEval_EvalCodeEx (co=0x7ffff7e5b0b0,
globals=<value optimized out>,
locals=<value optimized out>, args=0x3, argcount=77043152, kws=<value
optimized out>, kwcount=2,
defs=0xa0a800, defcount=2, closure=0x0) at Python/ceval.c:3253
#32 0x00007ffff7affdf8 in fast_function (f=0x6ec2f0, throwflag=<value
optimized out>) at Python/ceval.c:4109
#33 call_function (f=0x6ec2f0, throwflag=<value optimized out>) at
Python/ceval.c:4034
#34 PyEval_EvalFrameEx (f=0x6ec2f0, throwflag=<value optimized out>) at
Python/ceval.c:2666
#35 0x00007ffff7b01928 in PyEval_EvalCodeEx (co=0x7ffff7f11ab0,
globals=<value optimized out>,
locals=<value optimized out>, args=0x0, argcount=77043152, kws=<value
optimized out>, kwcount=0,
defs=0x0, defcount=0, closure=0x0) at Python/ceval.c:3253
#36 0x00007ffff7b01a42 in PyEval_EvalCode (co=0x4891068,
globals=0x7fffffffc370, locals=0x7fffffffc368)
at Python/ceval.c:667
#37 0x00007ffff7b21950 in run_mod (fp=0x6c7e60, filename=<value optimized
out>, start=<value optimized out>,
globals=<value optimized out>, locals=0x640260, closeit=0,
flags=0x7fffffffd560)
at Python/pythonrun.c:1346
#38 PyRun_FileExFlags (fp=0x6c7e60, filename=<value optimized out>,
start=<value optimized out>,
globals=<value optimized out>, locals=0x640260, closeit=0,
flags=0x7fffffffd560)
at Python/pythonrun.c:1332
#39 0x00007ffff7b21b1c in PyRun_SimpleFileExFlags (fp=<value optimized
out>,
filename=0x7fffffffe987
"/mnt/local/king/SAGE/experiment/notebook/sage-5.1.notebook/local/bin
/sage-ipython", closeit=0, flags=0x7fffffffd560) at Python/pythonrun.c:936
#40 0x00007ffff7b3711d in RunStartupFile (argc=<value optimized out>,
argv=<value optimized out>)
at Modules/main.c:143
#41 Py_Main (argc=<value optimized out>, argv=<value optimized out>) at
Modules/main.c:553
#42 0x00007ffff6e1dc8d in __libc_start_main (main=<value optimized out>,
argc=<value optimized out>,
ubp_av=<value optimized out>, init=<value optimized out>, fini=<value
optimized out>,
rtld_fini=<value optimized out>, stack_end=0x7fffffffd678) at libc-
start.c:228
#43 0x0000000000400699 in _start ()
}}}
So, the latest sage-specific thing is
`sage.misc.randstate.randstate.__dealloc__`, which does nothing but
{{{
gmp_randclear(self.gmp_state)
}}}
`self.gmp_state` is initialised in `__init__`. I am surprised: Aren't
those things supposed to be done in `__cinit__`, so that initialisation of
the c-data is granted even if Python initialisation fails?
Anyway, renaming `__init__` into `__cinit__` does not solve the problem.
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/10113#comment:1>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica,
and MATLAB
--
You received this message because you are subscribed to the Google Groups
"sage-trac" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sage-trac?hl=en.