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

Reply via email to