mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Give up support for cross-callcc set_trace_func.
* cont.c (cont_restore_thread): cause error if trace-status is changed. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66007 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
d35bfdac74
commit
6e33c16ffd
2 changed files with 17 additions and 5 deletions
5
cont.c
5
cont.c
|
@ -778,6 +778,10 @@ cont_restore_thread(rb_context_t *cont)
|
|||
ec_switch(th, fib);
|
||||
}
|
||||
|
||||
if (th->ec->trace_arg != sec->trace_arg) {
|
||||
rb_raise(rb_eRuntimeError, "can't call across trace_func");
|
||||
}
|
||||
|
||||
/* copy vm stack */
|
||||
#ifdef CAPTURE_JUST_VALID_VM_STACK
|
||||
MEMCPY(th->ec->vm_stack,
|
||||
|
@ -799,7 +803,6 @@ cont_restore_thread(rb_context_t *cont)
|
|||
th->ec->root_svar = sec->root_svar;
|
||||
th->ec->ensure_list = sec->ensure_list;
|
||||
th->ec->errinfo = sec->errinfo;
|
||||
th->ec->trace_arg = sec->trace_arg;
|
||||
|
||||
VM_ASSERT(th->ec->vm_stack != NULL);
|
||||
}
|
||||
|
|
|
@ -88,11 +88,16 @@ class TestContinuation < Test::Unit::TestCase
|
|||
@memo += 1
|
||||
c = cont
|
||||
cont = nil
|
||||
c.call(nil)
|
||||
begin
|
||||
c.call(nil)
|
||||
rescue RuntimeError
|
||||
set_trace_func(nil)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
cont = callcc { |cc| cc }
|
||||
|
||||
if cont
|
||||
set_trace_func(func)
|
||||
else
|
||||
|
@ -100,12 +105,12 @@ class TestContinuation < Test::Unit::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_tracing_with_set_trace_func
|
||||
def _test_tracing_with_set_trace_func
|
||||
@memo = 0
|
||||
tracing_with_set_trace_func
|
||||
tracing_with_set_trace_func
|
||||
tracing_with_set_trace_func
|
||||
assert_equal 3, @memo
|
||||
assert_equal 0, @memo
|
||||
end
|
||||
|
||||
def tracing_with_thread_set_trace_func
|
||||
|
@ -115,7 +120,11 @@ class TestContinuation < Test::Unit::TestCase
|
|||
@memo += 1
|
||||
c = cont
|
||||
cont = nil
|
||||
c.call(nil)
|
||||
begin
|
||||
c.call(nil)
|
||||
rescue RuntimeError
|
||||
Thread.current.set_trace_func(nil)
|
||||
end
|
||||
end
|
||||
end
|
||||
cont = callcc { |cc| cc }
|
||||
|
|
Loading…
Reference in a new issue