[Python-Dev] Issue #8863 adds a new?PYTHONNOFAULTHANDLER?environment variable

Victor Stinner vstinner at edenwall.com
Thu Dec 23 03:26:35 CET 2010


Le lundi 20 décembre 2010 à 13:09 -0500, Alexander Belopolsky a écrit :
> What if the program crashes (again) in the signal handler before
> having a chance to restore registers?

If the fault handler crashs, the registers are not restored.

> Also, can you point to documentation that describes register restoring behavior?

I found an article telling that the kernel saves integer and float
registers when calling a signal handler, but I am unable to find it
again, sorry. And I cannot find an article telling the opposite.

Anyway, it would just be horrible if a signal handler was responsible to
save/restore integer registers. If the kernel doesn't do that for us, I
suppose that the compiler or something else does it for us.

Eg. signal_default_int_handler(), the Python handler of SIGINT signal,
doesn't save/restore registers, even if it erases many of them.

> Because I had actual experience with that using R.  Your code may be
> better, but R brings up a dialog on segfault asking ...

You cannot compare a simple handler using simple signal-safe functions
like write(), and a complex handler calling graphical functions. It is
not safe to call graphical functions in a signal handler.

> (I actually use RPy which loads R into  Python as a shared library, 
> so the two handlers will conflict anyways.)

It depends if R handler calls the previous handler. My fault handler is
"chained" with the previous handler (it calls indirectly the previous
handler). If R fault handler does the same, all handlers will be
executed correctly (I don't think that the execution order matter).

Victor



More information about the Python-Dev mailing list