From 96ecfe9a57c1dcb7c824f41963696538e6005418 Mon Sep 17 00:00:00 2001 From: mame Date: Wed, 24 Mar 2010 14:47:00 +0000 Subject: * 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 --- thread.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'thread.c') 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; } -- cgit v1.2.3