1
0
Fork 0
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:
ko1 2018-11-26 19:59:08 +00:00
parent d35bfdac74
commit 6e33c16ffd
2 changed files with 17 additions and 5 deletions

5
cont.c
View file

@ -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);
}

View file

@ -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 }