mirror of
https://github.com/ruby/ruby.git
synced 2025-09-15 08:33:58 +02:00
eval.c: determine exit status and signal before finalization
* eval.c (ruby_cleanup): determine exit status and signal to terminate before finalization, to get rid of access destroyed T_DATA execption object. [ruby-core:58643] [Bug #9167] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43930 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
520f0fec95
commit
04ca48fc38
4 changed files with 58 additions and 6 deletions
13
eval.c
13
eval.c
|
@ -192,12 +192,6 @@ ruby_cleanup(volatile int ex)
|
|||
}
|
||||
th->errinfo = errs[1];
|
||||
ex = error_handle(ex);
|
||||
ruby_finalize_1();
|
||||
|
||||
/* unlock again if finalizer took mutexes. */
|
||||
rb_threadptr_unlock_all_locking_mutexes(GET_THREAD());
|
||||
POP_TAG();
|
||||
rb_thread_stop_timer_thread(1);
|
||||
|
||||
#if EXIT_SUCCESS != 0 || EXIT_FAILURE != 1
|
||||
switch (ex) {
|
||||
|
@ -232,6 +226,13 @@ ruby_cleanup(volatile int ex)
|
|||
ex = EXIT_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
ruby_finalize_1();
|
||||
|
||||
/* unlock again if finalizer took mutexes. */
|
||||
rb_threadptr_unlock_all_locking_mutexes(GET_THREAD());
|
||||
POP_TAG();
|
||||
rb_thread_stop_timer_thread(1);
|
||||
ruby_vm_destruct(GET_VM());
|
||||
if (state) ruby_default_signal(state);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue