summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--test/ruby/test_settracefunc.rb17
-rw-r--r--thread.c4
3 files changed, 22 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 7f25d0dfbb..9e3d44a202 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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,
diff --git a/test/ruby/test_settracefunc.rb b/test/ruby/test_settracefunc.rb
index 82d3dc4fae..af7f374669 100644
--- a/test/ruby/test_settracefunc.rb
+++ b/test/ruby/test_settracefunc.rb
@@ -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
diff --git a/thread.c b/thread.c
index bd8fcfb124..47ed9e0ed2 100644
--- a/thread.c
+++ b/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);