From 50c2a48b8502e96cfc399e80bcae939243d95395 Mon Sep 17 00:00:00 2001 From: akr Date: Mon, 5 May 2008 08:19:35 +0000 Subject: * eval.c (ruby_cleanup): wrap ruby_finalize_0 by SAVE_ROOT_JMPBUF to avoid SEGV by at_exit { Fiber.new{}.resume } on IA64. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16294 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ eval.c | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 25a48602fb..c10fb5531b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon May 5 17:17:40 2008 Tanaka Akira + + * eval.c (ruby_cleanup): wrap ruby_finalize_0 by SAVE_ROOT_JMPBUF to + avoid SEGV by at_exit { Fiber.new{}.resume } on IA64. + Mon May 5 12:12:11 2008 Yukihiro Matsumoto * array.c (rb_ary_slice_bang): should adjust length before making diff --git a/eval.c b/eval.c index e5c8d47fe2..d85fe85ccf 100644 --- a/eval.c +++ b/eval.c @@ -164,7 +164,13 @@ ruby_cleanup(int ex) errs[1] = th->errinfo; th->safe_level = 0; Init_stack((void *)&state); - ruby_finalize_0(); + + PUSH_TAG(); + if ((state = EXEC_TAG()) == 0) { + SAVE_ROOT_JMPBUF(th, ruby_finalize_0()); + } + POP_TAG(); + errs[0] = th->errinfo; PUSH_TAG(); if ((state = EXEC_TAG()) == 0) { -- cgit v1.2.3