Kai Blin wrote:
Some folks in #opensuse-buildservice told me that Jan Matejek had a "porting C
applications to use python 2.5" guide. Is it possible to post it to the list?
I figure I'm not the only one besides Jan who currently has a problem with
I guess darix ment this mail? I hope Jan won't mind if I post it here.
-------- Original Message --------
Subject: [packagers] how to solve invalid free() in python apps and modules
Date: Wed, 01 Nov 2006 15:29:55 +0100
From: Jan Matejek <jmatejek(a)suse.cz>
thought i'd share a bit of wisdom on the $subject, it appears not to be
Suppose you have an app that embeds/extends Python. Suppose it often
(quite reliably) aborts on "invalid free() or pointer corruption", maybe
right on startup.
Now let's look at the backtrace. At the top you'll see abort(), few
in-library calls, free(), and (things get interesting in here)
Something_dealloc. Or PySomething_remove, _del, something like that.
(If there's something else, then your problem is probably not solved in
this mail. But you can try it as well.)
Open up your $EDITOR on that function. What you see is a deallocator,
also known as destructor. A function that gets called when Python object
is being recycled. It receives a pointer to that object, cleans up after
whatever processing was doing with it, and then it deallocates the
The latter should be done by a call to PyObject_Del(self), or maybe in
some special cases self->ob_type->tp_free((PyObject*)self)
I bet my shoes on that in your case, there's PyMem_DEL(self) instead.
And that's it!
PyMem_DEL (or PyMem_Del) is basically a polite way of saying free() to
Python. Nothing less, nothing (much) more.
PyObject_Del, on the other hand, performs fancy things - talks to the
Python memory allocator about what has to be done, cleans up after
PyObject remnats of your custom type and whatnot. Same as free() vs.
delete, you can't mix the two of them.
So, just replace your PyMem_DEL with PyObject_Del, and voila, another
thanks for your attention,
To unsubscribe, e-mail: opensuse-packaging+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-packaging+help(a)opensuse.org