From 7de146d4a03fac4adae8c2e10397ab61274e9611 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= Date: Mon, 21 Feb 2022 10:52:16 -0300 Subject: [PATCH] python3-prompt_toolkit: restore sigint handlers Fixes #35712 See also: https://github.com/prompt-toolkit/python-prompt-toolkit/issues/1576 --- .../patches/restore-sigint-handler.patch | 57 +++++++++++++++++++ srcpkgs/python3-prompt_toolkit/template | 2 +- 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 srcpkgs/python3-prompt_toolkit/patches/restore-sigint-handler.patch diff --git a/srcpkgs/python3-prompt_toolkit/patches/restore-sigint-handler.patch b/srcpkgs/python3-prompt_toolkit/patches/restore-sigint-handler.patch new file mode 100644 index 000000000000..9e0fbdbfe03f --- /dev/null +++ b/srcpkgs/python3-prompt_toolkit/patches/restore-sigint-handler.patch @@ -0,0 +1,57 @@ +When setting a sigint handler, save and restore the previous handler, +since add_signal_handler and remove_signal_handler don't. + +Use cysignals if available so that the os-level handlers (struct +sigaction) are saved as well. If cysignals is not available, fallback +to saving only the python handlers. + +See: + - https://github.com/void-linux/void-packages/issues/35712 + - https://github.com/prompt-toolkit/python-prompt-toolkit/issues/1576 + - https://trac.sagemath.org/ticket/33360#comment:3 + +--- a/prompt_toolkit/application/application.py 2022-02-11 05:06:37.000000000 -0300 ++++ b/prompt_toolkit/application/application.py 2022-02-22 15:31:02.248681343 -0300 +@@ -98,6 +98,10 @@ + except ImportError: + import prompt_toolkit.eventloop.dummy_contextvars as contextvars # type: ignore + ++try: ++ from cysignals import pysignals ++except ImportError: ++ from . import dummy_pysignals as pysignals + + __all__ = [ + "Application", +@@ -805,6 +809,9 @@ + loop = get_event_loop() + + if handle_sigint: ++ # save sigint handlers ++ _sigint = signal.getsignal(signal.SIGINT) ++ _sigint_os = pysignals.getossignal(signal.SIGINT) + loop.add_signal_handler( + signal.SIGINT, + lambda *_: loop.call_soon_threadsafe( +@@ -843,6 +850,8 @@ + + if handle_sigint: + loop.remove_signal_handler(signal.SIGINT) ++ # restore python and os-level signal handlers ++ pysignals.setsignal(signal.SIGINT, _sigint, _sigint_os) + + # Reset slow_callback_duration. + loop.slow_callback_duration = original_slow_callback_duration +--- a/prompt_toolkit/application/dummy_pysignals.py 1969-12-31 21:00:00.000000000 -0300 ++++ b/prompt_toolkit/application/dummy_pysignals.py 2022-02-22 15:31:26.432386296 -0300 +@@ -0,0 +1,10 @@ ++# fallback in case cysignals is not available ++# these functions don't save the os level handlers ++ ++import signal ++ ++def getossignal(sig): ++ return None ++ ++def setsignal(sig, action, osaction=None): ++ return signal.signal(sig, action) diff --git a/srcpkgs/python3-prompt_toolkit/template b/srcpkgs/python3-prompt_toolkit/template index 0d625dc249fa..26bcb33e82bc 100644 --- a/srcpkgs/python3-prompt_toolkit/template +++ b/srcpkgs/python3-prompt_toolkit/template @@ -1,7 +1,7 @@ # Template file for 'python3-prompt_toolkit' pkgname=python3-prompt_toolkit version=3.0.28 -revision=1 +revision=2 wrksrc="prompt_toolkit-${version}" build_style=python3-module hostmakedepends="python3-setuptools"