Peter Eisentraut <[EMAIL PROTECTED]> writes: > Jim C. Nasby wrote: >> Since installing python 2.5, tapir has been failing:
> I have removed the use of the deprecated whrandom module, which should > take care of one regression test failure, but after that I get > *** glibc detected *** free(): invalid pointer: 0xa5df6e78 *** > LOG: server process (PID 1720) was terminated by signal 6 A bit of study of the Python documentation suggests that plpython.c is taking a whole lot of shortcuts in setting up its Python type objects. For me, this crash goes away with the attached patch ... but I don't know if it might fail with old Python versions. There are still a number of regression test diffs, which all look like Python 2.5 has unilaterally changed the format of object descriptions, eg ! DETAIL: plpy.SPIError: Unknown error in PLy_spi_prepare vs ! DETAIL: <class 'plpy.SPIError'>: Unknown error in PLy_spi_prepare Probably there's no help for that except to have two expected files. regards, tom lane Index: plpython.c =================================================================== RCS file: /cvsroot/pgsql/src/pl/plpython/plpython.c,v retrieving revision 1.89 diff -c -r1.89 plpython.c *** plpython.c 4 Oct 2006 00:30:14 -0000 1.89 --- plpython.c 6 Nov 2006 15:45:58 -0000 *************** *** 1981,1987 **** 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ ! 0, /* tp_xxx4 */ PLy_plan_doc, /* tp_doc */ }; --- 1981,1987 ---- 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ ! Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ PLy_plan_doc, /* tp_doc */ }; *************** *** 2026,2032 **** 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ ! 0, /* tp_xxx4 */ PLy_result_doc, /* tp_doc */ }; --- 2026,2032 ---- 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ ! Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ PLy_result_doc, /* tp_doc */ }; *************** *** 2098,2104 **** PLy_free(ob->args); } ! PyMem_DEL(arg); } --- 2098,2104 ---- PLy_free(ob->args); } ! arg->ob_type->tp_free(arg); } *************** *** 2152,2158 **** Py_XDECREF(ob->rows); Py_XDECREF(ob->status); ! PyMem_DEL(ob); } static PyObject * --- 2152,2158 ---- Py_XDECREF(ob->rows); Py_XDECREF(ob->status); ! arg->ob_type->tp_free(arg); } static PyObject * *************** *** 2701,2707 **** /* * initialize plpy module */ ! PLy_PlanType.ob_type = PLy_ResultType.ob_type = &PyType_Type; plpy = Py_InitModule("plpy", PLy_methods); plpy_dict = PyModule_GetDict(plpy); --- 2701,2711 ---- /* * initialize plpy module */ ! if (PyType_Ready(&PLy_PlanType) < 0) ! elog(ERROR, "could not init PLy_PlanType"); ! if (PyType_Ready(&PLy_ResultType) < 0) ! elog(ERROR, "could not init PLy_ResultType"); ! plpy = Py_InitModule("plpy", PLy_methods); plpy_dict = PyModule_GetDict(plpy); ---------------------------(end of broadcast)--------------------------- TIP 3: Have you checked our extensive FAQ? http://www.postgresql.org/docs/faq