From 27b302811d1d672f4667aa84f82a7fe25cdca7e9 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 19 Feb 2008 05:27:35 +0000 Subject: * ext/readline/readline.c (readline_event): prevent polling. based on a patch from error errorsson in [ruby-Bugs-17675]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@15546 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ ext/readline/readline.c | 19 +++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 91b6b3e65f..7f17320b34 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Tue Feb 19 14:27:32 2008 Nobuyoshi Nakada + + * ext/readline/readline.c (readline_event): prevent polling. based on + a patch from error errorsson in [ruby-Bugs-17675]. + Tue Feb 19 12:08:29 2008 Nobuyoshi Nakada * parse.y (yycompile): clear ruby_eval_tree_begin if parse failed. diff --git a/ext/readline/readline.c b/ext/readline/readline.c index 559e1c677b..82ddc8a3cb 100644 --- a/ext/readline/readline.c +++ b/ext/readline/readline.c @@ -42,17 +42,32 @@ static ID completion_proc, completion_case_fold; # define rl_completion_matches completion_matches #endif -static int readline_event(void); static char **readline_attempted_completion_function(const char *text, int start, int end); +#ifdef HAVE_RL_EVENT_HOOK +#ifdef DOSISH +#define BUSY_WAIT 1 +#else +#define BUSY_WAIT 0 +#endif + +static int readline_event(void); static int readline_event() { - CHECK_INTS; +#if BUSY_WAIT rb_thread_schedule(); +#else + fd_set rset; + + FD_ZERO(&rset); + FD_SET(fileno(rl_instream), &rset); + rb_thread_select(fileno(rl_instream) + 1, &rset, NULL, NULL, NULL); return 0; +#endif } +#endif static VALUE readline_readline(argc, argv, self) -- cgit v1.2.3