https://redmine.ruby-lang.org/
https://redmine.ruby-lang.org/favicon.ico?1709775478
2012-12-05T13:23:19Z
Ruby Issue Tracking System
Ruby master - Bug #7513: TracePoint#enable/disable should not cause error
https://redmine.ruby-lang.org/issues/7513?journal_id=34403
2012-12-05T13:23:19Z
ko1 (Koichi Sasada)
<ul></ul><p>(2012/12/05 11:52), ko1 (Koichi Sasada) wrote:</p>
<blockquote>
<p>TracePoint#enable/disable should not cause error if it is enabled or disabled.</p>
</blockquote>
<a name="Patch"></a>
<h2 >Patch:<a href="#Patch" class="wiki-anchor">¶</a></h2>
<a name="Index-ChangeLog"></a>
<h1 >Index: ChangeLog<a href="#Index-ChangeLog" class="wiki-anchor">¶</a></h1>
<p>--- ChangeLog (revision 38200)<br>
+++ ChangeLog (working copy)<br>
@@ -1,3 +1,11 @@<br>
+Wed Dec 5 12:45:30 2012 Koichi Sasada <a href="mailto:ko1@atdot.net" class="email">ko1@atdot.net</a><br>
+</p>
<ul>
<li>
<ul>
<li>vm_trace.c: TracePoint#enable should not cause an error</li>
</ul>
</li>
<li>when it is already enabled. TracePoint#disable is too.</li>
<li>[Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: TracePoint#enable/disable should not cause error (Closed)" href="https://redmine.ruby-lang.org/issues/7513">#7513</a>]</li>
<li>
<li>
<ul>
<li>test/ruby/test_settracefunc.rb: fix tests.</li>
</ul>
</li>
<li>
</ul>
<p>Wed Dec 5 11:42:38 2012 Koichi Sasada <a href="mailto:ko1@atdot.net" class="email">ko1@atdot.net</a></p>
<pre><code>* test/ruby/test_settracefunc.rb: disable trace.
</code></pre>
<a name="Index-vm_tracec"></a>
<h1 >Index: vm_trace.c<a href="#Index-vm_tracec" class="wiki-anchor">¶</a></h1>
<p>--- vm_trace.c (revision 38199)<br>
+++ vm_trace.c (working copy)<br>
@@ -952,17 +952,20 @@ rb_tracepoint_disable(VALUE tpval)</p>
<p>/*</p>
<ul>
<li>call-seq:</li>
</ul>
<ul>
<li>
<ul>
<li>trace.enable -> trace</li>
</ul>
</li>
</ul>
<ul>
<li>
<ul>
<li>trace.enable -> bool</li>
<li>trace.enable { block } -> obj</li>
<li>
<li>Activates the trace</li>
<li>
</ul>
</li>
</ul>
<ul>
<li>
<ul>
<li>Will raise a RuntimeError if the trace is already activated</li>
</ul>
</li>
</ul>
<ul>
<li>
<ul>
<li>Return true if trace was enabled.</li>
</ul>
</li>
<li>
<ul>
<li>Return false if trace was disabled.</li>
<li>
<li>trace.enabled? #=> false</li>
</ul>
</li>
</ul>
<ul>
<li>
<ul>
<li>trace.enable #=> #<a href="TracePoint:0x007fa3fad4aaa8" class="external">TracePoint:0x007fa3fad4aaa8</a>
</li>
</ul>
</li>
</ul>
<ul>
<li>
<ul>
<li>trace.enable #=> false (previous state)</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> # trace is enabled
</code></pre>
</li>
<li>trace.enabled? #=> true</li>
</ul>
</li>
</ul>
<ul>
<li>
<ul>
<li>trace.enable #=> RuntimeError</li>
</ul>
</li>
</ul>
<ul>
<li>
<ul>
<li>trace.enable #=> true (previous state)</li>
</ul>
</li>
<li>
<ul>
<li>
<pre><code> # trace is still enabled
</code></pre>
</li>
<li>
<li>If a block is given, the trace will only be enabled within the scope<br>
of the</li>
<li>block. Note: You cannot access event hooks within the block.<br>
@@ -986,17 +989,16 @@ static VALUE<br>
tracepoint_enable_m(VALUE tpval)<br>
{<br>
rb_tp_t *tp = tpptr(tpval);</li>
</ul>
</li>
</ul>
<ul>
<li>
<li>if (tp->tracing) {</li>
<li>rb_raise(rb_eRuntimeError, "trace is already enable");</li>
<li>}</li>
<li>
</ul>
<ul>
<li>int previous_tracing = tp->tracing;<br>
rb_tracepoint_enable(tpval);</li>
<li>if (rb_block_given_p()) {</li>
</ul>
<ul>
<li>return rb_ensure(rb_yield, Qnil, rb_tracepoint_disable, tpval);</li>
</ul>
<ul>
<li>return rb_ensure(rb_yield, Qnil,</li>
<li>
<pre><code> previous_tracing ? rb_tracepoint_enable : rb_tracepoint_disable,
</code></pre>
</li>
<li>
<pre><code> tpval);
</code></pre>
}<br>
else {</li>
</ul>
<ul>
<li>return tpval;</li>
</ul>
<ul>
<li>return previous_tracing ? Qtrue : Qfalse;<br>
}<br>
}</li>
</ul>
<p>@@ -1007,12 +1009,13 @@ tracepoint_enable_m(VALUE tpval)<br>
*</p>
<ul>
<li>Deactivates the trace</li>
<li>
</ul>
<ul>
<li>
<ul>
<li>Will raise a RuntimeError if the trace is already deactivated</li>
</ul>
</li>
</ul>
<ul>
<li>
<ul>
<li>Return true if trace was enabled.</li>
</ul>
</li>
<li>
<ul>
<li>Return false if trace was disabled.</li>
<li>
<li>trace.enabled? #=> true</li>
</ul>
</li>
</ul>
<ul>
<li>
<ul>
<li>trace.disable #=> #<a href="TracePoint:0x007fa3fad4aaa8" class="external">TracePoint:0x007fa3fad4aaa8</a>
</li>
</ul>
</li>
</ul>
<ul>
<li>
<ul>
<li>trace.disable #=> false (previous status)</li>
<li>trace.enabled? #=> false</li>
</ul>
</li>
</ul>
<ul>
<li>
<ul>
<li>trace.disable #=> RuntimeError</li>
</ul>
</li>
</ul>
<ul>
<li>
<ul>
<li>trace.disable #=> false</li>
<li>
<li>If a block is given, the trace will only be disable within the scope<br>
of the</li>
<li>block. Note: You cannot access event hooks within the block.<br>
@@ -1028,25 +1031,21 @@ tracepoint_enable_m(VALUE tpval)</li>
<li>trace.enabled?</li>
<li>#=> true</li>
<li>
</ul>
</li>
</ul>
<ul>
<li>
<ul>
<li>trace.enable { p trace.lineno }</li>
</ul>
</li>
<li>
<ul>
<li>#=> RuntimeError: access from outside</li>
</ul>
</li>
<li>
<ul>
<li>
</ul>
*/<br>
static VALUE<br>
tracepoint_disable_m(VALUE tpval)<br>
{<br>
rb_tp_t *tp = tpptr(tpval);</li>
<li>
<li>if (!tp->tracing) {</li>
<li>rb_raise(rb_eRuntimeError, "trace is not enable");</li>
<li>}</li>
<li>
</ul>
<ul>
<li>int previous_tracing = tp->tracing;<br>
rb_tracepoint_disable(tpval);</li>
<li>if (rb_block_given_p()) {</li>
</ul>
<ul>
<li>return rb_ensure(rb_yield, Qnil, rb_tracepoint_enable, tpval);</li>
</ul>
<ul>
<li>return rb_ensure(rb_yield, Qnil,</li>
<li>
<pre><code> previous_tracing ? rb_tracepoint_enable : rb_tracepoint_disable,
</code></pre>
</li>
<li>
<pre><code> tpval);
</code></pre>
}<br>
else {</li>
</ul>
<ul>
<li>return tpval;</li>
</ul>
<ul>
<li>return previous_tracing ? Qtrue : Qfalse;<br>
}<br>
}</li>
</ul>
<a name="Index-testrubytest_settracefuncrb"></a>
<h1 >Index: test/ruby/test_settracefunc.rb<a href="#Index-testrubytest_settracefuncrb" class="wiki-anchor">¶</a></h1>
<p>--- test/ruby/test_settracefunc.rb (revision 38200)<br>
+++ test/ruby/test_settracefunc.rb (working copy)<br>
@@ -619,6 +619,16 @@ class TestSetTraceFunc < Test::Unit::Tes<br>
}<br>
foo<br>
assert_equal([:foo], ary)<br>
+</p>
<ul>
<li>trace = TracePoint.new{}</li>
<li>begin</li>
<li>
<pre><code> assert_equal(false, trace.enable)
</code></pre>
</li>
<li>
<pre><code> assert_equal(true, trace.enable)
</code></pre>
</li>
<li>
<pre><code> trace.enable{}
</code></pre>
</li>
<li>
<pre><code> assert_equal(true, trace.enable)
</code></pre>
</li>
<li>ensure</li>
<li>
<pre><code> trace.disable
</code></pre>
</li>
<li>end<br>
end</li>
</ul>
<pre><code>def test_tracepoint_disable
</code></pre>
<p>@@ -633,6 +643,14 @@ class TestSetTraceFunc < Test::Unit::Tes<br>
foo<br>
trace.disable<br>
assert_equal([:foo, :foo], ary)<br>
+</p>
<ul>
<li>trace = TracePoint.new{}</li>
<li>trace.enable{</li>
<li>
<pre><code> assert_equal(true, trace.disable)
</code></pre>
</li>
<li>
<pre><code> assert_equal(false, trace.disable)
</code></pre>
</li>
<li>
<pre><code> trace.disable{}
</code></pre>
</li>
<li>
<pre><code> assert_equal(false, trace.disable)
</code></pre>
</li>
<li>}<br>
end</li>
</ul>
<pre><code>def test_tracepoint_enabled
</code></pre>
<p>--<br>
// SASADA Koichi at atdot dot net</p>
Ruby master - Bug #7513: TracePoint#enable/disable should not cause error
https://redmine.ruby-lang.org/issues/7513?journal_id=34436
2012-12-06T04:56:09Z
zzak (zzak _)
<ul></ul><p>=begin<br>
Hi Koichi-san,</p>
<p>For boolean call-seq, I like: trace.enable -> true or false</p>
<p>Re: calling event hooks within enable/disable block.</p>
<p>I mean here: (({trace.enable { p trace.lineno } #=> RuntimeError: access from outside}))<br>
=end</p>
Ruby master - Bug #7513: TracePoint#enable/disable should not cause error
https://redmine.ruby-lang.org/issues/7513?journal_id=34442
2012-12-06T12:13:56Z
ko1 (Koichi Sasada)
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Closed</i></li><li><strong>% Done</strong> changed from <i>0</i> to <i>100</i></li></ul><p>This issue was solved with changeset r38227.<br>
Koichi, thank you for reporting this issue.<br>
Your contribution to Ruby is greatly appreciated.<br>
May Ruby be with you.</p>
<hr>
<ul>
<li>vm_trace.c: TracePoint#enable should not cause an error<br>
when it is already enabled. TracePoint#disable is too.<br>
<a href="/issues/7513">[ruby-core:50561]</a> [ruby-trunk - Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: TracePoint#enable/disable should not cause error (Closed)" href="https://redmine.ruby-lang.org/issues/7513">#7513</a>]</li>
<li>test/ruby/test_settracefunc.rb: add tests.</li>
</ul>
Ruby master - Bug #7513: TracePoint#enable/disable should not cause error
https://redmine.ruby-lang.org/issues/7513?journal_id=34443
2012-12-06T12:14:47Z
ko1 (Koichi Sasada)
<ul><li><strong>Status</strong> changed from <i>Closed</i> to <i>Feedback</i></li></ul>
Ruby master - Bug #7513: TracePoint#enable/disable should not cause error
https://redmine.ruby-lang.org/issues/7513?journal_id=34444
2012-12-06T12:23:31Z
ko1 (Koichi Sasada)
<ul></ul><p>(2012/12/06 4:56), zzak (Zachary Scott) wrote:</p>
<blockquote>
<p>For boolean call-seq, I like: trace.enable -> true or false</p>
</blockquote>
<p>Okay.</p>
<blockquote>
<p>Re: calling event hooks within enable/disable block.</p>
<p>I mean here: (({trace.enable { p trace.lineno } #=> RuntimeError: access from outside}))</p>
</blockquote>
<p>Thank you. It makes sense.</p>
<p>I'll commit it because there are no compatible issue.<br>
If you try and feel strange, please comment us.</p>
<p>--<br>
// SASADA Koichi at atdot dot net</p>
Ruby master - Bug #7513: TracePoint#enable/disable should not cause error
https://redmine.ruby-lang.org/issues/7513?journal_id=34447
2012-12-06T14:03:49Z
zzak (zzak _)
<ul></ul><p>Thanks koichi, this is much better.</p>
Ruby master - Bug #7513: TracePoint#enable/disable should not cause error
https://redmine.ruby-lang.org/issues/7513?journal_id=34872
2012-12-20T07:44:05Z
ko1 (Koichi Sasada)
<ul><li><strong>Status</strong> changed from <i>Feedback</i> to <i>Closed</i></li></ul>