I am trying this out, parts of it are direct from the Python 2.4 manual. //----------- icallbk.c #include "Python.h" PyObject *fcallback = NULL;
static PyObject* call_func(PyObject* self, PyObject* args) { PyObject *result; PyObject *arglist; int arg = 123; arglist = Py_BuildValue("(i)", arg); result = PyEval_CallObject(fcallback, arglist); Py_DECREF(arglist); Py_DECREF(result); Py_RETURN_NONE; } static PyObject * set_callback(PyObject *self, PyObject *args) { PyObject *result = NULL; PyObject *temp; if (PyArg_ParseTuple(args, "O:set_callback", &temp)) { if (!PyCallable_Check(temp)) { PyErr_SetString(PyExc_TypeError, "parameter must be callable"); return NULL; } Py_XINCREF(temp); /* Add a reference to new callback */ Py_XDECREF(fcallback); /* Dispose of previous callback */ fcallback = temp; /* Remember new callback */ /* Boilerplate to return "None" */ Py_INCREF(Py_None); result = Py_None; } return result; } static PyMethodDef icallbk_methods[] = { { "call_func", call_func, METH_VARARGS, "call_func" }, { "set_callback", set_callback, METH_VARARGS, "set_callback" }, { 0,0,0,0 } }; PyMODINIT_FUNC initicallbk(void) { (void) Py_InitModule("icallbk", icallbk_methods); } """ I use the following code to run the extension above. """ # cb.py: Code to run the extension above. import icallbk as c def f(a): print a c.set_callback(f) c.call_func() """ But when I run that for a hundred times, I think the system is losing 100KB or thereabouts that is no longer re-claimed. Can someone confirm this, and if it so, kindly inform me what is wrong with the code? Thanks -- http://mail.python.org/mailman/listinfo/python-list