From fbbb06f803611735c9792678f005f9f6953b73af Mon Sep 17 00:00:00 2001 From: tarui Date: Thu, 20 Dec 2012 12:02:37 +0000 Subject: * vm_trace.c (rb_suppress_tracing): bugfix for vm->trace_running counter. And if tracing is already true, vm_trace_running ops is skipped to control overflow. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38509 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- vm_trace.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'vm_trace.c') diff --git a/vm_trace.c b/vm_trace.c index 9186983e28..f8fc829fc4 100644 --- a/vm_trace.c +++ b/vm_trace.c @@ -333,7 +333,8 @@ rb_suppress_tracing(VALUE (*func)(VALUE), VALUE arg) const int vm_tracing = th->vm->trace_running; const int tracing = th->trace_running; - th->vm->trace_running = 1; + if(!tracing) + th->vm->trace_running++; th->trace_running = 1; raised = rb_threadptr_reset_raised(th); outer_state = th->state; @@ -349,7 +350,8 @@ rb_suppress_tracing(VALUE (*func)(VALUE), VALUE arg) rb_threadptr_set_raised(th); } th->trace_running = tracing; - th->vm->trace_running = vm_tracing; + if(!tracing) + th->vm->trace_running--; if (state) { JUMP_TAG(state); -- cgit v1.2.3