mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* thread.c, vm_eval.c: add Thread.backtrace.
* test/ruby/test_thread.rb: add a test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23691 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									d3027870ee
								
							
						
					
					
						commit
						63bd8a74e8
					
				
					 4 changed files with 44 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -1,3 +1,9 @@
 | 
			
		|||
Sun Jun 14 14:57:57 2009  Koichi Sasada  <ko1@atdot.net>
 | 
			
		||||
 | 
			
		||||
	* thread.c, vm_eval.c: add Thread.backtrace. 
 | 
			
		||||
 | 
			
		||||
	* test/ruby/test_thread.rb: add a test.
 | 
			
		||||
 | 
			
		||||
Sun Jun 14 13:58:32 2009  Koichi Sasada  <ko1@atdot.net>
 | 
			
		||||
 | 
			
		||||
	* transcode.c (transcode_restartable0): revert last commit because
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -516,4 +516,14 @@ class TestThreadGroup < Test::Unit::TestCase
 | 
			
		|||
    c.class_eval { def initialize; end }
 | 
			
		||||
    assert_raise(ThreadError) { c.new.start }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_backtrace
 | 
			
		||||
    Thread.new{
 | 
			
		||||
      assert_equal(Array, Thread.main.backtrace.class)
 | 
			
		||||
    }.join
 | 
			
		||||
 | 
			
		||||
    t = Thread.new{}
 | 
			
		||||
    t.join
 | 
			
		||||
    assert_equal(nil, t.backtrace)
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										9
									
								
								thread.c
									
										
									
									
									
								
							
							
						
						
									
										9
									
								
								thread.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -3817,6 +3817,14 @@ ruby_suppress_tracing(VALUE (*func)(VALUE, int), VALUE arg, int always)
 | 
			
		|||
    return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
VALUE rb_thread_backtrace(VALUE thval);
 | 
			
		||||
 | 
			
		||||
static VALUE
 | 
			
		||||
rb_thread_backtrace_m(VALUE thval)
 | 
			
		||||
{
 | 
			
		||||
    return rb_thread_backtrace(thval);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 *  +Thread+ encapsulates the behavior of a thread of
 | 
			
		||||
 *  execution, including the main thread of the Ruby script.
 | 
			
		||||
| 
						 | 
				
			
			@ -3873,6 +3881,7 @@ Init_Thread(void)
 | 
			
		|||
    rb_define_method(rb_cThread, "abort_on_exception=", rb_thread_abort_exc_set, 1);
 | 
			
		||||
    rb_define_method(rb_cThread, "safe_level", rb_thread_safe_level, 0);
 | 
			
		||||
    rb_define_method(rb_cThread, "group", rb_thread_group, 0);
 | 
			
		||||
    rb_define_method(rb_cThread, "backtrace", rb_thread_backtrace_m, 0);
 | 
			
		||||
 | 
			
		||||
    rb_define_method(rb_cThread, "inspect", rb_thread_inspect, 0);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										19
									
								
								vm_eval.c
									
										
									
									
									
								
							
							
						
						
									
										19
									
								
								vm_eval.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1347,6 +1347,25 @@ rb_make_backtrace(void)
 | 
			
		|||
    return vm_backtrace(GET_THREAD(), -1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
VALUE
 | 
			
		||||
rb_thread_backtrace(VALUE thval)
 | 
			
		||||
{
 | 
			
		||||
    rb_thread_t *th;
 | 
			
		||||
    GetThreadPtr(thval, th);
 | 
			
		||||
 | 
			
		||||
    switch (th->status) {
 | 
			
		||||
      case THREAD_RUNNABLE:
 | 
			
		||||
      case THREAD_STOPPED:
 | 
			
		||||
      case THREAD_STOPPED_FOREVER:
 | 
			
		||||
	break;
 | 
			
		||||
      case THREAD_TO_KILL:
 | 
			
		||||
      case THREAD_KILLED:
 | 
			
		||||
	return Qnil;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return vm_backtrace(th, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
VALUE
 | 
			
		||||
rb_backtrace_each(rb_backtrace_iter_func *iter, void *arg)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue