From 11422497134555d738e34f1d9d6c7fcc98a0f592 Mon Sep 17 00:00:00 2001 From: normal Date: Wed, 28 May 2014 01:48:11 +0000 Subject: vm.c: remove rb_vm_living_threads_foreach function Shorter code with fewer callbacks and casts should be more readable. * vm.c (rb_vm_living_threads_foreach): remove function [ruby-core:62745] * thread.c (terminate_i): remove * thread.c (terminate_all): implement (inlines old terminate_i) * thread.c (rb_thread_terminate_all): use terminate_all * thread.c (rb_thread_fd_close_i): remove * thread.c (rb_thread_fd_close): iterate inline * thread.c (thread_list_i): remove * thread.c (rb_thread_list): iterate inline * thread.c (rb_thread_atfork_internal): iterate inline * thread.c (terminate_atfork_i): update types to remove casts * thread.c (terminate_atfork_before_exec_i): ditto * thread.c (struct thgroup_list_params): remove definition * thread.c (thgroup_list_i): remove * thread.c (thgroup_list): iterate inline * thread.c (check_deadlock_i): remove * thread.c (debug_deadlock_check): implement (inlines check_deadlock_i) * thread.c (debug_i): remove * thread.c (rb_check_deadlock): iterate inline * vm.c (vm_mark_each_thread_func): remove * vm.c (rb_vm_mark): iterate inline * vm_core.h (rb_vm_living_threads_remove): remove * vm_trace.c (clear_trace_func_i): remove * vm_trace.c (rb_clear_trace_func): iterate inline git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46195 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- vm.c | 34 +++++----------------------------- 1 file changed, 5 insertions(+), 29 deletions(-) (limited to 'vm.c') diff --git a/vm.c b/vm.c index 40eceea..f66122b 100644 --- a/vm.c +++ b/vm.c @@ -1685,13 +1685,6 @@ rb_vm_call_cfunc(VALUE recv, VALUE (*func)(VALUE), VALUE arg, /* vm */ -static int -vm_mark_each_thread_func(rb_thread_t *th, void *dummy) -{ - rb_gc_mark(th->self); - return ST_CONTINUE; -} - void rb_vm_trace_mark_event_hooks(rb_hook_list_t *hooks); void @@ -1703,7 +1696,11 @@ rb_vm_mark(void *ptr) RUBY_GC_INFO("-------------------------------------------------\n"); if (ptr) { rb_vm_t *vm = ptr; - rb_vm_living_threads_foreach(vm, vm_mark_each_thread_func, 0); + rb_thread_t *th; + + list_for_each(&vm->living_threads, th, vmlt_node) { + rb_gc_mark(th->self); + } RUBY_MARK_UNLESS_NULL(vm->thgroup_default); RUBY_MARK_UNLESS_NULL(vm->mark_object_ary); RUBY_MARK_UNLESS_NULL(vm->load_path); @@ -3018,24 +3015,3 @@ vm_collect_usage_register(int reg, int isset) (*ruby_vm_collect_usage_func_register)(reg, isset); } #endif - -void -rb_vm_living_threads_foreach(rb_vm_t *vm, - int (*fn)(rb_thread_t *, void*), void *arg) -{ - rb_thread_t *cur = NULL, *next; - list_for_each_safe(&vm->living_threads, cur, next, vmlt_node) { - int rc = fn(cur, arg); - switch (rc) { - case ST_CHECK: - case ST_CONTINUE: break; - case ST_STOP: return; - case ST_DELETE: /* untested */ - rb_vm_living_threads_remove(vm, cur); - xfree(cur); - break; - default: - rb_bug("rb_vm_living_threads_foreach: unexpected: %d", rc); - } - } -} -- cgit v1.1