|
edit_catcher() performs a longjmp via rc_raise() to the matching setjmp in
doit(). The latter does the same as before, so that edit_alloc() gets called
again, but this time the installation of the signal handlers trashes the old
handlers saved in the last call. Once readline() returns normally to
edit_alloc() the wrong signal handlers get restored.
The simplified call hierarchy looks like this:
doit();
sigsetjmp();
edit_alloc();
oldint = sys_signal(SIGINT, edit_catcher);
readline();
SIGINT -> edit_catcher();
siglongjmp();
sys_signal(SIGINT, oldint);
Restoring the old signal handlers in edit_catcher() solves this.
|