summaryrefslogtreecommitdiffstats
path: root/ext
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-02-19 05:27:35 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-02-19 05:27:35 +0000
commit0c2db26280eecfdb3de19c4294e3a655425b4833 (patch)
tree4bf20d48b88b591c1efb3ebc3dea78ac4cbe9b70 /ext
parent9ffeef1fa60bf30e46665940e8ae93f9e787002a (diff)
downloadruby-0c2db26280eecfdb3de19c4294e3a655425b4833.tar.gz
ruby-0c2db26280eecfdb3de19c4294e3a655425b4833.tar.xz
ruby-0c2db26280eecfdb3de19c4294e3a655425b4833.zip
* ext/readline/readline.c (readline_event): prevent polling. based on
a patch from error errorsson in [ruby-Bugs-17675]. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@15546 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r--ext/readline/readline.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/ext/readline/readline.c b/ext/readline/readline.c
index 53d37a06a..ffa4a5dc7 100644
--- a/ext/readline/readline.c
+++ b/ext/readline/readline.c
@@ -43,16 +43,28 @@ 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
+#define BUSY_WAIT 0
+
+static int readline_event(void);
static int
-readline_event()
+readline_event(void)
{
+#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(int argc, VALUE *argv, VALUE self)