diff options
author | Guido van Rossum <guido@python.org> | 2000-09-16 16:37:53 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2000-09-16 16:37:53 (GMT) |
commit | 174efc9cdbc3b398096ec24a7bb4ebe650ec5929 (patch) | |
tree | 9f9491afd052d30b6e4cbecf0bb415af4ffce455 /Modules/readline.c | |
parent | d2cd7adf6f6e6ea0e838c6a92fc70848579641ab (diff) | |
download | cpython-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.c | 17 |
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(); |