https://redmine.ruby-lang.org/https://redmine.ruby-lang.org/favicon.ico?17113305112010-02-10T04:43:04ZRuby Issue Tracking SystemRuby master - Bug #2729: `unexpected break' occurs when a proc is called in ensurehttps://redmine.ruby-lang.org/issues/2729?journal_id=82372010-02-10T04:43:04Znobu (Nobuyoshi Nakada)nobu@ruby-lang.org
<ul></ul><p>=begin<br>
Hi,</p>
<p>At Wed, 10 Feb 2010 04:36:18 +0900,<br>
Nobuyoshi Nakada wrote in <a href="/issues/2729">[ruby-core:28132]</a>:</p>
<blockquote>
<p>Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: `unexpected break' occurs when a proc is called in ensure (Closed)" href="https://redmine.ruby-lang.org/issues/2729">#2729</a>: `unexpected break' occurs when a proc is called in ensure</p>
</blockquote>
<p>Test case.</p>
<h1>
<br>
Index: bootstraptest/test_flow.rb</h1>
<p>--- bootstraptest/test_flow.rb (revision 26629)<br>
+++ bootstraptest/test_flow.rb (working copy)<br>
@@ -518,4 +518,17 @@ assert_equal %Q{ENSURE\n}, %q{<br>
end<br>
e = Bug2728.new<br>
+}],</p>
<ul>
<li>['<a href="/issues/2729">[ruby-core:28132]</a>', %q{</li>
<li>class Bug2729</li>
<li>include Enumerable</li>
<li>def each</li>
<li>
<pre><code> begin
</code></pre>
</li>
<li>
<pre><code> yield :foo
</code></pre>
</li>
<li>
<pre><code> ensure
</code></pre>
</li>
<li>
<pre><code> proc {}.call
</code></pre>
</li>
<li>
<pre><code> end
</code></pre>
</li>
<li>end</li>
<li>end</li>
<li>e = Bug2729.new<br>
}]].each do |bug, src|<br>
assert_equal "foo", src + %q{e.detect {true}}, bug<br>
</li>
</ul>
<p>--<br>
Nobu Nakada</p>
<p>=end</p> Ruby master - Bug #2729: `unexpected break' occurs when a proc is called in ensurehttps://redmine.ruby-lang.org/issues/2729?journal_id=83732010-02-21T19:21:04Zwanabe (_ wanabe)s.wanabe@gmail.com
<ul><li><strong>File</strong> <a href="/attachments/864">proc_in_ensure.patch</a> <a class="icon-only icon-download" title="Download" href="/attachments/download/864/proc_in_ensure.patch">proc_in_ensure.patch</a> added</li></ul><p>=begin<br>
This patch prevent the exception.<br>
I know it's not a fundamental solution, but I hope it will help for finding a bug.<br>
=end</p> Ruby master - Bug #2729: `unexpected break' occurs when a proc is called in ensurehttps://redmine.ruby-lang.org/issues/2729?journal_id=182802011-06-26T14:43:39Znaruse (Yui NARUSE)naruse@airemix.jp
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Assigned</i></li><li><strong>Assignee</strong> set to <i>ko1 (Koichi Sasada)</i></li></ul> Ruby master - Bug #2729: `unexpected break' occurs when a proc is called in ensurehttps://redmine.ruby-lang.org/issues/2729?journal_id=182812011-06-26T14:44:45Znaruse (Yui NARUSE)naruse@airemix.jp
<ul><li><strong>Target version</strong> changed from <i>2.0.0</i> to <i>1.9.3</i></li></ul> Ruby master - Bug #2729: `unexpected break' occurs when a proc is called in ensurehttps://redmine.ruby-lang.org/issues/2729?journal_id=198602011-07-31T10:58:53Zktsj (Kazuki Tsujimoto)kazuki@callcc.net
<ul><li><strong>File</strong> <a href="/attachments/1946">rewrite-dfp-in-errinfo.txt</a> <a class="icon-only icon-download" title="Download" href="/attachments/download/1946/rewrite-dfp-in-errinfo.txt">rewrite-dfp-in-errinfo.txt</a> added</li></ul><p>A patch fixing the problem is attached, but it might be only a workaroud.</p> Ruby master - Bug #2729: `unexpected break' occurs when a proc is called in ensurehttps://redmine.ruby-lang.org/issues/2729?journal_id=204042011-08-25T08:23:07Zko1 (Koichi Sasada)
<ul><li><strong>ruby -v</strong> changed from <i>ruby 1.9.2dev (2010-02-10 trunk 26629) [x86_64-darwin9.0]</i> to <i>-</i></li></ul><p>(2011/07/30 18:58), Kazuki Tsujimoto wrote:</p>
<blockquote>
<p>A patch fixing the problem is attached, but it might be only a workaroud.</p>
</blockquote>
<p>Thank you. I'll apply this patch for 1.9.3 and trunk.</p>
<p>To solve it, I'll change the vm_throw mechanism on trunk (not throw dfp,<br>
but throw cfp).</p>
<a name="BTW-vm_throw-is-toooo-complicated"></a>
<h1 >BTW, vm_throw() is toooo complicated.<a href="#BTW-vm_throw-is-toooo-complicated" class="wiki-anchor">¶</a></h1>
<p>Regards,<br>
Koichi</p>
<p>--<br>
// SASADA Koichi at atdot dot net</p> Ruby master - Bug #2729: `unexpected break' occurs when a proc is called in ensurehttps://redmine.ruby-lang.org/issues/2729?journal_id=204052011-08-25T08:37:57Zko1 (Koichi Sasada)
<ul><li><strong>Status</strong> changed from <i>Assigned</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 r33064.<br>
Nobuyoshi, 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.c (vm_make_env_each): work around to solve Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: `unexpected break' occurs when a proc is called in ensure (Closed)" href="https://redmine.ruby-lang.org/issues/2729">#2729</a>.<br>
fixes: Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: `unexpected break' occurs when a proc is called in ensure (Closed)" href="https://redmine.ruby-lang.org/issues/2729">#2729</a><br>
a patch from Kazuki Tsujimoto <a href="mailto:kazuki@callcc.net" class="email">kazuki@callcc.net</a><br>
This problem is caused by changing dfp (dynamic env pointer)<br>
from saved dfp. Saved dfp is pointed env in VM stack. However,<br>
the dfp can be moved because VM copies env from VM stack to<br>
the heap. At this copying, dfp was also changed. To solve this<br>
problem, I'll try to change throw mechanism (not save target dfp,<br>
but save target cfp).</li>
<li>bootstraptest/test_flow.rb: add a test for above.</li>
</ul> Ruby master - Bug #2729: `unexpected break' occurs when a proc is called in ensurehttps://redmine.ruby-lang.org/issues/2729?journal_id=285192012-07-29T06:31:18Zlgierth (Lars Gierth)lars.gierth@gmail.com
<ul></ul><p>=begin<br>
This patch doesn't seem to have landed in 1.9.2 and 1.9.3. Can someone backport it?</p>
<p>$ git checkout trunk<br>
$ git log --oneline | grep 33064<br>
a09e713 * proc.c (proc_new): force to rewrite errinfo when calling Proc.new in ensure. [Bug <a class="issue tracker-4 status-6 priority-4 priority-default closed" title="Backport: `unexpected return' occurs when a proc is called in ensure (Rejected)" href="https://redmine.ruby-lang.org/issues/5234">#5234</a>] <a href="/issues/5234">[ruby-core:39125]</a> This code will be removed after changing throw mechanism (see r33064).<br>
$ git checkout ruby_1_9_2<br>
$ git log --oneline | grep 33064<br>
$ git checkout ruby_1_9_3<br>
$ git log --oneline | grep 33064<br>
=end</p> Ruby master - Bug #2729: `unexpected break' occurs when a proc is called in ensurehttps://redmine.ruby-lang.org/issues/2729?journal_id=285202012-07-29T06:33:54Zlgierth (Lars Gierth)lars.gierth@gmail.com
<ul></ul><p><a class="issue tracker-4 status-6 priority-4 priority-default closed" title="Backport: `unexpected return' occurs when a proc is called in ensure (Rejected)" href="https://redmine.ruby-lang.org/issues/5234">#5234</a> has been backported to 1.9.3 at least.</p>