[Numpy-discussion] test_multiarray.TestIO.test_ascii segmentation fault with Python2.7
Pauli Virtanen
pav+sp@iki...
Tue Dec 15 10:51:39 CST 2009
Tue, 15 Dec 2009 10:36:03 -0600, Bruce Southey wrote:
[clip]
> Program received signal SIGSEGV, Segmentation fault. setup_context
> (registry=<value optimized out>, module=<value optimized out>,
> lineno=<value optimized out>, filename=<value optimized out>,
> stack_level=<value optimized out>)
> at Python/_warnings.c:449
> 449 PyFrameObject *f = PyThreadState_GET()->frame; (gdb) bt
> #0 setup_context (registry=<value optimized out>, module=<value
> optimized out>, lineno=<value optimized out>, filename=<value optimized
> out>, stack_level=<value optimized out>)
> at Python/_warnings.c:449
> #1 do_warn (registry=<value optimized out>, module=<value optimized
> out>, lineno=<value optimized out>, filename=<value optimized out>,
> stack_level=<value optimized out>)
> at Python/_warnings.c:593
> #2 0x0000000000493c81 in PyErr_WarnEx (category=0x760720, text=<value
> optimized out>, stack_level=1) at Python/_warnings.c:719 #3
> 0x00000000004c8e94 in PyOS_ascii_strtod (nptr=0x7ffff7f08914 "1 , 2 , 3
> , 4", endptr=0x7fffffffdb28) at Python/pystrtod.c:282 #4
> 0x00007ffff2954151 in NumPyOS_ascii_strtod (s=0x7ffff7f08914 "1 , 2 , 3
> , 4", endptr=0x7fffffffdb28) at numpy/core/src/multiarray/numpyos.c:527
Looks like it's trying to raise a deprecation warning after
PyArray_FromString has released GIL. So that was the reason why it caused
a segfault also in 3.1.
PyOS_ascii_strtod was deprecated in 2.7 and in 3.1. Apparently, we now
*must* do something like
#if PY_VERSION_HEX >= 0x02060000
return PyOS_string_to_double(s, endptr, NULL);
#else
return PyOS_ascii_strtod(s, endptr);
#endif
everywhere the function is used.
It also seems that this needs to be backported to Numpy 1.4.x...
(Note to self: this is also the origin of the crashes in scipy/
lambertw... GIL must be reacquired before raising any warnings.)
--
Pauli Virtanen
More information about the NumPy-Discussion
mailing list