[capi-sig] Fix random crashes - embedding py/w PyObject pointers to app data.
rhamph at gmail.com
Wed Oct 22 06:03:29 CEST 2008
On Tue, Oct 21, 2008 at 9:34 PM, Campbell Barton <ideasman42 at gmail.com> wrote:
> Hi, just spent a couple of hours looking into a bug that others might also have.
> If your app embeds python, and allows scripts to throw exceptions
> while the application keeps running you may also have this problem.
> sys.last_traceback will store the last exception along with the
> namespace dictionary of the script that just ran (with all its
> functions etc, variables etc).
> In our case this caused crashes because you could load in new data,
> making many of the PyObjects referenced from sys.last_traceback, point
> to invalid data. Once sys.last_traceback was set again it would free
> the existing data sometimes touching pointers with invalid addresses
> causing a segfault.
> Simple solution is to run this after PyErr_Print();
> PySys_SetObject( "last_traceback", Py_None);
> This can also free memory, if large datasets are references from the
> traceback. maybe some of your would fine this useful.
Do you mean you have a PyObject with a pointer to malloc'd memory, and
after the exception is handled (but not cleared) you free the malloc'd
memory, but leave the PyObject with a pointer to it? If so you should
be keeping track of any PyObjects and clearing them instead (or let
them take care of freeing the malloc'd memory).
Adam Olsen, aka Rhamphoryncus
More information about the capi-sig