зеркало из https://github.com/github/ruby.git
* thread.c: TracePoint#self returns invoking/exitting thread object
at thread_begin/end event. * test/ruby/test_settracefunc.rb: fix test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38058 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
d0a4fecffc
Коммит
bb4410a289
|
@ -1,3 +1,10 @@
|
|||
Fri Nov 30 20:47:44 2012 Koichi Sasada <ko1@atdot.net>
|
||||
|
||||
* thread.c: TracePoint#self returns invoking/exitting thread object
|
||||
at thread_begin/end event.
|
||||
|
||||
* test/ruby/test_settracefunc.rb: fix test.
|
||||
|
||||
Fri Nov 30 19:55:17 2012 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||
|
||||
* test/ruby/memory_status.rb (Memory::Win32): use fiddle instead of dl,
|
||||
|
|
|
@ -726,15 +726,24 @@ class TestSetTraceFunc < Test::Unit::TestCase
|
|||
|
||||
def test_tracepoint_thread
|
||||
events = []
|
||||
thread_self = nil
|
||||
created_thread = nil
|
||||
TracePoint.new(:thread_begin, :thread_end){|tp|
|
||||
events << [Thread.current, tp.event, tp.self]
|
||||
events << [Thread.current,
|
||||
tp.event,
|
||||
tp.lineno, #=> 0
|
||||
tp.path, #=> nil
|
||||
tp.binding, #=> nil
|
||||
tp.defined_class, #=> nil,
|
||||
tp.self.class # tp.self return creating/ending thread
|
||||
]
|
||||
}.enable{
|
||||
created_thread = Thread.new{}
|
||||
created_thread = Thread.new{thread_self = self}
|
||||
created_thread.join
|
||||
}
|
||||
assert_equal([created_thread, :thread_begin, self], events[0])
|
||||
assert_equal([created_thread, :thread_end, self], events[1])
|
||||
assert_equal(self, thread_self)
|
||||
assert_equal([created_thread, :thread_begin, 0, nil, nil, nil, Thread], events[0])
|
||||
assert_equal([created_thread, :thread_end, 0, nil, nil, nil, Thread], events[1])
|
||||
assert_equal(2, events.size)
|
||||
end
|
||||
end
|
||||
|
|
4
thread.c
4
thread.c
|
@ -478,9 +478,9 @@ thread_start_func_2(rb_thread_t *th, VALUE *stack_start, VALUE *register_stack_s
|
|||
th->errinfo = Qnil;
|
||||
th->root_lep = rb_vm_ep_local_ep(proc->block.ep);
|
||||
th->root_svar = Qnil;
|
||||
EXEC_EVENT_HOOK(th, RUBY_EVENT_THREAD_BEGIN, proc->block.self, 0, 0, th->self);
|
||||
EXEC_EVENT_HOOK(th, RUBY_EVENT_THREAD_BEGIN, th->self, 0, 0, Qundef);
|
||||
th->value = rb_vm_invoke_proc(th, proc, (int)RARRAY_LEN(args), RARRAY_PTR(args), 0);
|
||||
EXEC_EVENT_HOOK(th, RUBY_EVENT_THREAD_END, proc->block.self, 0, 0, th->self);
|
||||
EXEC_EVENT_HOOK(th, RUBY_EVENT_THREAD_END, th->self, 0, 0, Qundef);
|
||||
}
|
||||
else {
|
||||
th->value = (*th->first_func)((void *)args);
|
||||
|
|
Загрузка…
Ссылка в новой задаче