[Python-Dev] Need to hook Py_FatalError

Josiah Carlson jcarlson at uci.edu
Tue May 3 22:39:21 CEST 2005


"m.u.k" <m.u.k.2 at gawab.com> wrote:
> Josiah Carlson <jcarlson at uci.edu> wrote in
> news:20050503112637.648F.JCARLSON at uci.edu: 
> 
> > Offering any hook for Py_FatalError may not even be enough, as some of
> > those errors are caused by insufficient memory.  What if a hook were
> > available, but it couldn't be called because there wasn't enough memory?
> > 
> > Of course there is the option of pre-allocating a few kilobytes, then
> > just before one calls the hook, freeing that memory so that the hook can
> > execute (assuming the hook is small enough).  I'm not sure if this is a
> > desireable general mechanic, but it may be sufficient for you.  If you
> > do figure out a logging mechanism that is almost guaranteed to execute
> > on FatalError, post it to sourceforge.
>  
> IMHO this should be left to hooker(apparerently not right word, but you get 
> the point :) ). If he allocates more mem. or does heavy stuff, that will just 
> fail. Anyway abort() is a failure too. Either abort() will end the process or 
> OS will on such a critical error.

I'm not talking about doing memory-intensive callbacks, I'm talking
about the function call itself.

From what I understand, any function call in Python requires a memory
allocation. This is trivially true in the case of rentrant Python calls;
which requires the allocation of a frame object from heap memory, and in
the case of all calls, from C stack memory. If you cannot allocate a
frame for __del__ method calling (one of the error conditions), you
certainly aren't going to be able to call a Python callback (no heap
memory), and may not have enough stack memory required by your logging
function; even if it is written in C (especially if you construct a
nontrivial portion of the message in memory before it is printed).

If I'm wrong, I'd like to hear it, but I'm still waiting for your patch
on sourceforge.
 - Josiah



More information about the Python-Dev mailing list