summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-13 08:21:24 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-13 08:21:24 +0000
commit8f1e7a37e520fd1b105bec102cb05d2b49acf4a2 (patch)
treef463b7c587f8cfb1d0d5d5704518885b1c3d899e
parentd4b7cc796cfbc8224a387d4e906ce1e3908f4970 (diff)
* thread.c (rb_thread_check_ints): added. please note that
this function may cause ruby's thread switching. * include/ruby/intern.h: ditto. * regint.h: use rb_thread_check_ints() instead of RUBY_CHECK_INTS() directly. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18572 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog10
-rw-r--r--include/ruby/intern.h1
-rw-r--r--regint.h3
-rw-r--r--thread.c13
4 files changed, 25 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 87c4370156..ec202d1a8a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+Wed Aug 13 17:18:37 2008 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c (rb_thread_check_ints): added. please note that
+ this function may cause ruby's thread switching.
+
+ * include/ruby/intern.h: ditto.
+
+ * regint.h: use rb_thread_check_ints() instead of
+ RUBY_CHECK_INTS() directly.
+
Wed Aug 13 17:01:36 2008 Akinori MUSHA <knu@iDaemons.org>
* golf_prelude.rb, lib/set.rb (TC_Set#test_each),
diff --git a/include/ruby/intern.h b/include/ruby/intern.h
index df9354918a..eed85edc3c 100644
--- a/include/ruby/intern.h
+++ b/include/ruby/intern.h
@@ -654,6 +654,7 @@ VALUE rb_struct_define_without_accessor(const char *, VALUE, rb_alloc_func_t, ..
/* thread.c */
typedef void rb_unblock_function_t(void *);
typedef VALUE rb_blocking_function_t(void *);
+void rb_thread_check_ints(void);
VALUE rb_thread_blocking_region(rb_blocking_function_t *func, void *data1,
rb_unblock_function_t *ubf, void *data2);
#define RB_UBF_DFL ((rb_unblock_function_t *)-1)
diff --git a/regint.h b/regint.h
index b9bb3b89b3..fc37f65680 100644
--- a/regint.h
+++ b/regint.h
@@ -115,8 +115,7 @@
#ifdef RUBY
-#include "vm_core.h"
-#define CHECK_INTERRUPT_IN_MATCH_AT RUBY_VM_CHECK_INTS()
+#define CHECK_INTERRUPT_IN_MATCH_AT rb_thread_check_ints()
#define onig_st_init_table st_init_table
#define onig_st_init_table_with_size st_init_table_with_size
#define onig_st_init_numtable st_init_numtable
diff --git a/thread.c b/thread.c
index 20cb6b931f..e30e4e33d7 100644
--- a/thread.c
+++ b/thread.c
@@ -877,6 +877,19 @@ rb_thread_polling(void)
}
}
+/*
+ * CAUTION: This function causes thread switching.
+ * rb_thread_check_ints() check ruby's interrupts.
+ * some interrupt needs thread switching/invoke handlers,
+ * and so on.
+ */
+
+void
+rb_thread_check_ints(void)
+{
+ RUBY_VM_CHECK_INTS();
+}
+
struct timeval rb_time_timeval();
void