[Numpy-discussion] RE: NA_updateDataPtr segmentation fault bug?
Todd Miller
jmiller at stsci.edu
Wed Feb 25 09:36:12 CST 2004
On Wed, 2004-02-25 at 11:34, Marco Bubke wrote:
> Ok
>
> cdef NumArray array_to_float(NumArray array):
> cdef NumArray new_array
> new_array = array
> NA_updateDataPtr(new_array)
> NA_updateDataPtr(new_array)
> flat_array = NA_InputArray(array, tFloat32, NUM_C_ARRAY)
> return flat_array
>
> Here the C code:
>
> static PyArrayObject *__pyx_f_2gl_array_to_float(PyArrayObject *__pyx_v_array)
> {
> PyArrayObject *__pyx_v_new_array;
> PyObject *__pyx_v_flat_array;
> PyArrayObject *__pyx_r;
> PyObject *__pyx_1 = 0;
> Py_INCREF(__pyx_v_array);
> ((PyObject*)__pyx_v_new_array) = Py_None;
> Py_INCREF(((PyObject*)__pyx_v_new_array));
> __pyx_v_flat_array = Py_None; Py_INCREF(__pyx_v_flat_array);
>
> /* "/home/marco/projects/calliopeia/numarray.pxd":102 */
> Py_INCREF(((PyObject *)__pyx_v_array));
> Py_DECREF(((PyObject *)__pyx_v_new_array));
> ((PyObject *)__pyx_v_new_array) = ((PyObject *)__pyx_v_array);
>
> /* "/home/marco/projects/calliopeia/numarray.pxd":103 */
> __pyx_1 = NA_updateDataPtr(((PyObject *)__pyx_v_new_array)); if (!__pyx_1)
> {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; goto __pyx_L
> 1;}
> Py_DECREF(__pyx_1); __pyx_1 = 0;
One problem is right here: NA_updateDataPtr does not return a new
reference. Thus, _pyx_v_new_array/_pyx_1 is losing references right
here.
>
> /* "/home/marco/projects/calliopeia/numarray.pxd":104 */
> __pyx_1 = NA_updateDataPtr(((PyObject *)__pyx_v_new_array)); if (!__pyx_1)
> {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; goto __pyx_L
> 1;}
> Py_DECREF(__pyx_1); __pyx_1 = 0;
And of course it's also losing them here as well. I haven't finished
analyzing the rest of the code. If that fix doesn't solve the problem,
let me know.
Regards,
Todd
>
> /* "/home/marco/projects/calliopeia/numarray.pxd":105 */
> __pyx_1 = NA_InputArray(((PyObject *)__pyx_v_array),tFloat32,NUM_C_ARRAY);
> if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105
> ; goto __pyx_L1;}
> Py_DECREF(__pyx_v_flat_array);
> __pyx_v_flat_array = __pyx_1;
> __pyx_1 = 0;
>
> /* "/home/marco/projects/calliopeia/numarray.pxd":106 */
> if (!__Pyx_TypeTest(__pyx_v_flat_array, __pyx_ptype_2gl__numarray))
> {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; goto __pyx_L1;}
> Py_INCREF(__pyx_v_flat_array);
> __pyx_r = (PyArrayObject *)__pyx_v_flat_array;
> goto __pyx_L0;
>
> (PyObject *)__pyx_r = Py_None; Py_INCREF((PyObject *)__pyx_r);
> goto __pyx_L0;
> __pyx_L1:;
> Py_XDECREF(__pyx_1);
> __Pyx_AddTraceback("gl.array_to_float");
> __pyx_r = 0;
> __pyx_L0:;
> Py_DECREF(__pyx_v_new_array);
> Py_DECREF(__pyx_v_flat_array);
> Py_DECREF(__pyx_v_array);
> return ((PyArrayObject *)__pyx_r) ;
> }
>
>
>
>
> -------------------------------------------------------
> SF.Net is sponsored by: Speed Start Your Linux Apps Now.
> Build and deploy apps & Web services for Linux with
> a free DVD software kit from IBM. Click Now!
> http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click
> _______________________________________________
> Numpy-discussion mailing list
> Numpy-discussion at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/numpy-discussion
--
Todd Miller <jmiller at stsci.edu>
More information about the Numpy-discussion
mailing list