ruby-changes:24811
From: nobu <ko1@a...>
Date: Fri, 31 Aug 2012 14:03:57 +0900 (JST)
Subject: [ruby-changes:24811] nobu:r36862 (trunk): vm_trace.c: freed memory access
nobu 2012-08-31 14:03:47 +0900 (Fri, 31 Aug 2012) New Revision: 36862 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=36862 Log: vm_trace.c: freed memory access * vm_trace.c (clean_hooks): do not access freed memory. Modified files: trunk/ChangeLog trunk/vm_trace.c Index: ChangeLog =================================================================== --- ChangeLog (revision 36861) +++ ChangeLog (revision 36862) @@ -1,5 +1,7 @@ -Fri Aug 31 14:02:44 2012 Nobuyoshi Nakada <nobu@r...> +Fri Aug 31 14:03:45 2012 Nobuyoshi Nakada <nobu@r...> + * vm_trace.c (clean_hooks): do not access freed memory. + * vm_trace.c (rb_threadptr_exec_event_hooks): fix uninitialized state when no events is excuted. Index: vm_trace.c =================================================================== --- vm_trace.c (revision 36861) +++ vm_trace.c (revision 36862) @@ -249,31 +249,21 @@ static void clean_hooks(rb_hook_list_t *list) { - rb_event_hook_t *hook = list->hooks, *prev = 0; + rb_event_hook_t *hook, **nextp = &list->hooks; list->events = 0; list->need_clean = 0; - while (hook) { + while ((hook = *nextp) != 0) { if (hook->hook_flags & RUBY_HOOK_FLAG_DELETED) { - if (prev == 0) { - /* start of list */ - list->hooks = hook->next; - } - else { - prev->next = hook->next; - } - + *nextp = hook->next; recalc_remove_ruby_vm_event_flags(hook->events); xfree(hook); - goto next_iter; } else { list->events |= hook->events; /* update active events */ + nextp = &hook->next; } - prev = hook; - next_iter: - hook = hook->next; } } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/