1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

eval.c: extra conversion of exit status

* eval.c (ruby_cleanup): error_handle() returns exit status to the
  system, not internal error state, do not convert the exit status
  again.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51290 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2015-07-18 09:45:25 +00:00
parent 3661dae19c
commit ca5cfbe1ab
2 changed files with 13 additions and 17 deletions

View file

@ -1,3 +1,9 @@
Sat Jul 18 18:45:22 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
* eval.c (ruby_cleanup): error_handle() returns exit status to the
system, not internal error state, do not convert the exit status
again.
Sat Jul 18 10:29:03 2015 Eric Wong <e@80x24.org>
* test/ruby/test_process.rb: test thread+sigs work after failed exec

24
eval.c
View file

@ -164,6 +164,7 @@ ruby_cleanup(volatile int ex)
volatile VALUE errs[2];
rb_thread_t *th = GET_THREAD();
int nerr;
volatile int sysex = EXIT_SUCCESS;
rb_threadptr_interrupt(th);
rb_threadptr_check_signal(th);
@ -195,22 +196,11 @@ ruby_cleanup(volatile int ex)
ex = state;
}
th->errinfo = errs[1];
ex = error_handle(ex);
#if EXIT_SUCCESS != 0 || EXIT_FAILURE != 1
switch (ex) {
#if EXIT_SUCCESS != 0
case 0: ex = EXIT_SUCCESS; break;
#endif
#if EXIT_FAILURE != 1
case 1: ex = EXIT_FAILURE; break;
#endif
}
#endif
sysex = error_handle(ex);
state = 0;
for (nerr = 0; nerr < numberof(errs); ++nerr) {
VALUE err = errs[nerr];
VALUE err = ATOMIC_SIZE_EXCHANGE(errs[nerr], Qnil);
if (!RTEST(err)) continue;
@ -218,7 +208,7 @@ ruby_cleanup(volatile int ex)
if (THROW_DATA_P(err)) continue;
if (rb_obj_is_kind_of(err, rb_eSystemExit)) {
ex = sysexit_status(err);
sysex = sysexit_status(err);
break;
}
else if (rb_obj_is_kind_of(err, rb_eSignal)) {
@ -226,8 +216,8 @@ ruby_cleanup(volatile int ex)
state = NUM2INT(sig);
break;
}
else if (ex == EXIT_SUCCESS) {
ex = EXIT_FAILURE;
else if (sysex == EXIT_SUCCESS) {
sysex = EXIT_FAILURE;
}
}
@ -240,7 +230,7 @@ ruby_cleanup(volatile int ex)
ruby_vm_destruct(GET_VM());
if (state) ruby_default_signal(state);
return ex;
return sysex;
}
static int