summaryrefslogtreecommitdiffstats
path: root/Modules/readline.c
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2000-09-16 16:37:53 (GMT)
committerGuido van Rossum <guido@python.org>2000-09-16 16:37:53 (GMT)
commit174efc9cdbc3b398096ec24a7bb4ebe650ec5929 (patch)
tree9f9491afd052d30b6e4cbecf0bb415af4ffce455 /Modules/readline.c
parentd2cd7adf6f6e6ea0e838c6a92fc70848579641ab (diff)
downloadcpython-174efc9cdbc3b398096ec24a7bb4ebe650ec5929.zip
cpython-174efc9cdbc3b398096ec24a7bb4ebe650ec5929.tar.gz
cpython-174efc9cdbc3b398096ec24a7bb4ebe650ec5929.tar.bz2
Use PyOS_setsig() instead of directly calling signal() or sigaction().
This fixes the first half of bug #110611: the immediate exit when ^C is hit when readline and threads are configured. Also added a new module variable, readline.library_version.
Diffstat (limited to 'Modules/readline.c')
-rw-r--r--Modules/readline.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/Modules/readline.c b/Modules/readline.c
index a797d29..faa574f 100644
--- a/Modules/readline.c
+++ b/Modules/readline.c
@@ -447,19 +447,20 @@ call_readline(char *prompt)
{
size_t n;
char *p, *q;
- void (*old_inthandler)(int);
- old_inthandler = signal(SIGINT, onintr);
+ PyOS_sighandler_t old_inthandler;
+
+ old_inthandler = PyOS_setsig(SIGINT, onintr);
if (setjmp(jbuf)) {
#ifdef HAVE_SIGRELSE
/* This seems necessary on SunOS 4.1 (Rasmus Hahn) */
sigrelse(SIGINT);
#endif
- signal(SIGINT, old_inthandler);
+ PyOS_setsig(SIGINT, old_inthandler);
return NULL;
}
rl_event_hook = PyOS_InputHook;
p = readline(prompt);
- signal(SIGINT, old_inthandler);
+ PyOS_setsig(SIGINT, old_inthandler);
/* We must return a buffer allocated with PyMem_Malloc. */
if (p == NULL) {
@@ -493,10 +494,16 @@ static char doc_module[] =
DL_EXPORT(void)
initreadline(void)
{
- PyObject *m;
+ PyObject *m, *d, *v;
m = Py_InitModule4("readline", readline_methods, doc_module,
(PyObject *)NULL, PYTHON_API_VERSION);
+
+ d = PyModule_GetDict(m);
+ v = PyString_FromString(rl_library_version);
+ PyDict_SetItemString(d, "library_version", v);
+ Py_XDECREF(v);
+
if (isatty(fileno(stdin))) {
PyOS_ReadlineFunctionPointer = call_readline;
setup_readline();