# HG changeset patch # User Pierre-Yves David # Date 2017-04-06 09:25:13 # Node ID 20a68f714f9b1fee88b5992ca62064db1dd4eb58 # Parent 0130c3e1b1d9cf3d1066adeeb5e2a72a9c8fd4f6 crecord: ensure we reinstall the SIGTSTP handler Previous, exceptions would prevent the reinstallation of the signal. diff --git a/mercurial/crecord.py b/mercurial/crecord.py --- a/mercurial/crecord.py +++ b/mercurial/crecord.py @@ -474,11 +474,13 @@ def chunkselector(ui, headerlist, operat ui.write(_('starting interactive selection\n')) chunkselector = curseschunkselector(headerlist, ui, operation) f = signal.getsignal(signal.SIGTSTP) - curses.wrapper(chunkselector.main) - if chunkselector.initerr is not None: - raise error.Abort(chunkselector.initerr) - # ncurses does not restore signal handler for SIGTSTP - signal.signal(signal.SIGTSTP, f) + try: + curses.wrapper(chunkselector.main) + if chunkselector.initerr is not None: + raise error.Abort(chunkselector.initerr) + # ncurses does not restore signal handler for SIGTSTP + finally: + signal.signal(signal.SIGTSTP, f) return chunkselector.opts def testdecorator(testfn, f):