Problem with Embedded Call

Yogi Parish parish at ikb.mavt.ethz.ch
Wed May 2 14:33:48 EDT 2001


Hello all,

I have a problem with a program that calls a python routine many times
over and over again.
Unfortunately, after some time, there seem to be problems that are
somehow to the reference count
management. The routine runs satisfactory ca. 1000 times and then fails
at various points.

I would be happy if somebody could help me out with the following
code...

/**** BEGIN SNIPPET *****/

PyInitialize()  <-- done elsewhere

 PyObject *pmod = NULL, *pfunc = NULL;
 PyObject *ppar = NULL, *pargs = NULL;


  pmod = PyImport_ImportModule("testmodule");
  pfunc = PyObject_GetAttrString(pmod, "testfunction");

float x=0.0, y=1.0;
pargs = Py_BuildValue("ff", x, y); // Build the args

 ppar  = PyObject_CallObject( pfunc, pargs );

 if (ppar==NULL) {
  fprintf( file, "ppar is NULL %d \n",counter++);
 }

if (PyArg_Parse(ppar, "(ff)", &x, &y ) == 0 )
  fprintf ( file, "PyArgParse Problem\n");

 Py_XDECREF(pargs);
 Py_XDECREF(ppar);
// Py_XDECREF(pfunc);
// Py_XDECREF(pmod);  No effect on the program if those two lines are
uncommented or not

/*** END SNIPPET ***/

This part of the routine (part of a calculation) runs ok for many
passes, but after some
time pfunc is not callable and the PyObject_CallObject returns
NULL (obviously). The rest of the code should be OK.

I have tried every combination of DECREFs I could think of... Can
anybody
point towards the light?

thank you very much for help
yp




More information about the Python-list mailing list