mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Symptomatic treatment for rb_thread_terminate_all
freeze
Under uncertain condition, `rb_thread_terminate_all` gets stuck. `make test-all TESTOPTS="test/ruby/test_gc.rb -n test_interrupt_in_finalizer` fails very rarely (only once every thousand runs). This IS a bug, but seems difficult to fix it soon. This commit makes `rb_thread_terminate_all` wake up every one second, instead of waiting forever, which mitigates the unuseful freeze. This is not an essential solution for the bug, though. I'll create a ticket with how to reproduce the original issue. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60694 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
8ea78d66a1
commit
a798e49f57
1 changed files with 4 additions and 1 deletions
5
thread.c
5
thread.c
|
@ -476,6 +476,8 @@ rb_threadptr_unlock_all_locking_mutexes(rb_thread_t *th)
|
|||
}
|
||||
}
|
||||
|
||||
static struct timeval double2timeval(double d);
|
||||
|
||||
void
|
||||
rb_thread_terminate_all(void)
|
||||
{
|
||||
|
@ -499,12 +501,13 @@ rb_thread_terminate_all(void)
|
|||
terminate_all(vm, th);
|
||||
|
||||
while (vm_living_thread_num(vm) > 1) {
|
||||
struct timeval tv = double2timeval(1.0);
|
||||
/*
|
||||
* Thread exiting routine in thread_start_func_2 notify
|
||||
* me when the last sub-thread exit.
|
||||
*/
|
||||
sleeping = 1;
|
||||
native_sleep(th, 0);
|
||||
native_sleep(th, &tv);
|
||||
RUBY_VM_CHECK_INTS_BLOCKING(ec);
|
||||
sleeping = 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue