From: Guido van Rossum Date: Sat, 16 Sep 2000 16:37:53 +0000 (+0000) Subject: Use PyOS_setsig() instead of directly calling signal() or sigaction(). X-Git-Tag: v2.0b2~246 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=174efc9cdbc3b398096ec24a7bb4ebe650ec5929;p=python 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. --- diff --git a/Modules/readline.c b/Modules/readline.c index a797d2951d..faa574ffcf 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();