summaryrefslogtreecommitdiff
path: root/thread.c
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2020-12-24 04:29:59 +0900
committerKoichi Sasada <ko1@atdot.net>2020-12-24 04:30:50 +0900
commit7340e7f82780f529d80490045f5ea3e2559d563c (patch)
tree5d0784a0de345d637e1c211c6558f53b81a3308a /thread.c
parent7fcb6b3dbe7517fe5426fdb6871cd4940a71b7e8 (diff)
introduce rb_ractor_atfork()
to reset main ractor at fork().
Diffstat (limited to 'thread.c')
-rw-r--r--thread.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/thread.c b/thread.c
index a7cd6e4c28..22b77b7f13 100644
--- a/thread.c
+++ b/thread.c
@@ -4719,6 +4719,7 @@ rb_clear_coverages(void)
}
#if defined(HAVE_WORKING_FORK)
+
static void
rb_thread_atfork_internal(rb_thread_t *th, void (*atfork)(rb_thread_t *, const rb_thread_t *))
{
@@ -4741,11 +4742,7 @@ rb_thread_atfork_internal(rb_thread_t *th, void (*atfork)(rb_thread_t *, const r
}
rb_vm_living_threads_init(vm);
- // threads
- vm->ractor.cnt = 0;
- rb_ractor_living_threads_init(th->ractor);
- rb_ractor_living_threads_insert(th->ractor, th);
-
+ rb_ractor_atfork(vm, th);
/* may be held by MJIT threads in parent */
rb_native_mutex_initialize(&vm->waitpid_lock);
@@ -4758,6 +4755,7 @@ rb_thread_atfork_internal(rb_thread_t *th, void (*atfork)(rb_thread_t *, const r
rb_ractor_sleeper_threads_clear(th->ractor);
rb_clear_coverages();
+ VM_ASSERT(vm->ractor.blocking_cnt == 0);
VM_ASSERT(vm->ractor.cnt == 1);
}