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:
parent
3661dae19c
commit
ca5cfbe1ab
2 changed files with 13 additions and 17 deletions
|
@ -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
24
eval.c
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue