]> granicus.if.org Git - python/commitdiff
[Bug #1552726] Avoid repeatedly polling in interactive mode -- only put a timeout...
authorAndrew M. Kuchling <amk@amk.ca>
Thu, 7 Sep 2006 13:59:38 +0000 (13:59 +0000)
committerAndrew M. Kuchling <amk@amk.ca>
Thu, 7 Sep 2006 13:59:38 +0000 (13:59 +0000)
if an input hook has been defined.  Patch by Richard Boulton.

This select() code is only executed with readline 2.1, or if
READLINE_CALLBACKS is defined.

Backport candidate for 2.5, 2.4, probably earlier versions too.

Modules/readline.c

index 92f2d1f15f35f3e9ab521b5c0c4bb8fb3db1ffb6..853874be2506e78b65bcab6a970542a2d9dc80ad 100644 (file)
@@ -768,10 +768,16 @@ readline_until_enter_or_signal(char *prompt, int *signal)
 
                while (!has_input)
                {       struct timeval timeout = {0, 100000}; /* 0.1 seconds */
+
+                       /* [Bug #1552726] Only limit the pause if an input hook has been 
+                          defined.  */
+                       struct timeval *timeoutp = NULL;
+                       if (PyOS_InputHook) 
+                               timeoutp = &timeout;
                        FD_SET(fileno(rl_instream), &selectset);
                        /* select resets selectset if no input was available */
                        has_input = select(fileno(rl_instream) + 1, &selectset,
-                                          NULL, NULL, &timeout);
+                                          NULL, NULL, timeoutp);
                        if(PyOS_InputHook) PyOS_InputHook();
                }