summaryrefslogtreecommitdiff
path: root/ext/readline/readline.c
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
commit8a9bd6a5c610e96118815fd7c0fc9846e2903210 (patch)
tree4bf20d48b88b591c1efb3ebc3dea78ac4cbe9b70 /ext/readline/readline.c
parentb81a66d1ef2e578d9e248ea36d3cf4beb72bab53 (diff)
* 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/trunk@15546 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/readline/readline.c')
-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 53d37a06aa..ffa4a5dc77 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)