From 6046ca37d3d028959bb244467da215e537172eea Mon Sep 17 00:00:00 2001 From: ko1 Date: Sat, 7 Nov 2015 23:10:55 +0000 Subject: * vm_trace.c (exec_hooks_precheck): check need_clean everytime to clean-up unused hooks. * vm_trace.c (list->need_clean): use as boolean value. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52483 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ vm_trace.c | 11 +++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index ba6ab176ac..e16c963589 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Sun Nov 8 08:10:31 2015 Koichi Sasada + + * vm_trace.c (exec_hooks_precheck): check need_clean everytime + to clean-up unused hooks. + + * vm_trace.c (list->need_clean): use as boolean value. + Sun Nov 8 01:31:27 2015 NARUSE, Yui * lib/net/http.rb (Net::HTTP#initialize): diff --git a/vm_trace.c b/vm_trace.c index ff2118384a..0515abf7ab 100644 --- a/vm_trace.c +++ b/vm_trace.c @@ -171,7 +171,7 @@ remove_event_hook(rb_hook_list_t *list, rb_event_hook_func_t func, VALUE data) if (data == Qundef || hook->data == data) { hook->hook_flags |= RUBY_EVENT_HOOK_FLAG_DELETED; ret+=1; - list->need_clean++; + list->need_clean = TRUE; } } hook = hook->next; @@ -230,7 +230,7 @@ clean_hooks(rb_hook_list_t *list) rb_event_hook_t *hook, **nextp = &list->hooks; list->events = 0; - list->need_clean = 0; + list->need_clean = FALSE; while ((hook = *nextp) != 0) { if (hook->hook_flags & RUBY_EVENT_HOOK_FLAG_DELETED) { @@ -265,14 +265,13 @@ exec_hooks_body(rb_thread_t *th, rb_hook_list_t *list, const rb_trace_arg_t *tra static int exec_hooks_precheck(rb_thread_t *th, rb_hook_list_t *list, const rb_trace_arg_t *trace_arg) { - if ((list->events & trace_arg->event) == 0) return 0; - - if (UNLIKELY(list->need_clean > 0)) { + if (UNLIKELY(list->need_clean != FALSE)) { if (th->vm->trace_running <= 1) { /* only running this hooks */ clean_hooks(list); } } - return 1; + + return (list->events & trace_arg->event) != 0; } static void -- cgit v1.2.3