Skip to content

Commit ba1bd67

Browse files
committed
merge revision(s) 54681: [Backport ruby#12302]
* eval_jump.c (exec_end_procs_chain): restore previous error info for each end procs. [ruby-core:75038] [Bug ruby#12302] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_2@54769 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1 parent ed01f3c commit ba1bd67

File tree

4 files changed

+31
-6
lines changed

4 files changed

+31
-6
lines changed

ChangeLog

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
Tue Apr 26 13:16:41 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
2+
3+
* eval_jump.c (exec_end_procs_chain): restore previous error info
4+
for each end procs. [ruby-core:75038] [Bug #12302]
5+
16
Fri Apr 22 18:36:15 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
27

38
* compile.c (new_label_body): initialize bit fields, since

eval_jump.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,17 +94,19 @@ rb_mark_end_proc(void)
9494
}
9595

9696
static void
97-
exec_end_procs_chain(struct end_proc_data *volatile *procs)
97+
exec_end_procs_chain(struct end_proc_data *volatile *procs, VALUE *errp)
9898
{
9999
struct end_proc_data volatile endproc;
100100
struct end_proc_data *link;
101+
VALUE errinfo = *errp;
101102

102103
while ((link = *procs) != 0) {
103104
*procs = link->next;
104105
endproc = *link;
105106
xfree(link);
106107
rb_set_safe_level_force(endproc.safe);
107108
(*endproc.func) (endproc.data);
109+
*errp = errinfo;
108110
}
109111
}
110112

@@ -119,8 +121,8 @@ rb_exec_end_proc(void)
119121
PUSH_TAG();
120122
if ((status = EXEC_TAG()) == 0) {
121123
again:
122-
exec_end_procs_chain(&ephemeral_end_procs);
123-
exec_end_procs_chain(&end_procs);
124+
exec_end_procs_chain(&ephemeral_end_procs, &th->errinfo);
125+
exec_end_procs_chain(&end_procs, &th->errinfo);
124126
}
125127
else {
126128
VAR_INITIALIZED(th);

test/ruby/test_beginendblock.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,4 +187,22 @@ def test_callcc_at_exit
187187
EOS
188188
assert_normal_exit(script, bug9110)
189189
end
190+
191+
def test_errinfo_at_exit
192+
bug12302 = '[ruby-core:75038] [Bug #12302]'
193+
assert_in_out_err([], <<-'end;', %w[2:exit 1:exit], [], bug12302)
194+
at_exit do
195+
puts "1:#{$!}"
196+
end
197+
198+
at_exit do
199+
puts "2:#{$!}"
200+
raise 'x' rescue nil
201+
end
202+
203+
at_exit do
204+
exit
205+
end
206+
end;
207+
end
190208
end

version.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
#define RUBY_VERSION "2.2.5"
2-
#define RUBY_RELEASE_DATE "2016-04-22"
3-
#define RUBY_PATCHLEVEL 314
2+
#define RUBY_RELEASE_DATE "2016-04-26"
3+
#define RUBY_PATCHLEVEL 315
44

55
#define RUBY_RELEASE_YEAR 2016
66
#define RUBY_RELEASE_MONTH 4
7-
#define RUBY_RELEASE_DAY 22
7+
#define RUBY_RELEASE_DAY 26
88

99
#include "ruby/version.h"
1010

0 commit comments

Comments
 (0)