summaryrefslogtreecommitdiff
path: root/input.c
diff options
context:
space:
mode:
authorBert Münnich <ber.t@posteo.de>2015-11-28 15:48:46 +0100
committerBert Münnich <ber.t@posteo.de>2015-11-28 16:15:48 +0100
commita5faae14cd81c019b8757c2f263799d19a2218e0 (patch)
treece4d6acab4282f818f6c8068e93523a1aecc6ba4 /input.c
parentc95bdf7ce9be6c6ed8ca4b0a474fc4947836eba9 (diff)
Restore signal handlers when catching signals in edit_alloc()
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.
Diffstat (limited to 'input.c')
0 files changed, 0 insertions, 0 deletions