summaryrefslogtreecommitdiff
path: root/thread.c
diff options
context:
space:
mode:
authormame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-03-24 14:47:00 +0000
committermame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-03-24 14:47:00 +0000
commit96ecfe9a57c1dcb7c824f41963696538e6005418 (patch)
tree66ede3d999586d8383b34c3fe01f43f5297c6722 /thread.c
parent30a4825aea33d5adf1ca36192f892d41aeb979df (diff)
* thread.c (thread_create_core): let new thread inherit RUBY_EVENT_VM
of event_flags. [ruby-core:25191] * thread.c (rb_threadptr_exec_event_hooks): delete RUBY_EVENT_VM if all event_hooks are removed. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27033 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'thread.c')
-rw-r--r--thread.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/thread.c b/thread.c
index c56f3b72dc..a3dfe007b2 100644
--- a/thread.c
+++ b/thread.c
@@ -549,6 +549,9 @@ thread_create_core(VALUE thval, VALUE args, VALUE (*fn)(ANYARGS))
th->thgroup = GET_THREAD()->thgroup;
native_mutex_initialize(&th->interrupt_lock);
+ if (GET_VM()->event_hooks != NULL)
+ th->event_flags |= RUBY_EVENT_VM;
+
/* kick thread */
st_insert(th->vm->living_threads, thval, (st_data_t) th->thread_id);
err = native_thread_create(th);
@@ -3769,7 +3772,12 @@ rb_threadptr_exec_event_hooks(rb_thread_t *th, rb_event_flag_t flag, VALUE self,
exec_event_hooks(th->event_hooks, flag, self, id, klass);
}
if (wait_event & RUBY_EVENT_VM) {
- exec_event_hooks(th->vm->event_hooks, flag, self, id, klass);
+ if (th->vm->event_hooks == NULL) {
+ th->event_flags &= (~RUBY_EVENT_VM);
+ }
+ else {
+ exec_event_hooks(th->vm->event_hooks, flag, self, id, klass);
+ }
}
th->errinfo = errinfo;
}