summaryrefslogtreecommitdiff
path: root/thread_pthread_mn.c
diff options
context:
space:
mode:
authorJohn Hawthorn <john@hawthorn.email>2026-02-07 17:50:54 -0800
committerJohn Hawthorn <john@hawthorn.email>2026-02-07 18:20:17 -0800
commitfd089e3e95ebbded14c9a2d51fce376fbbbf289d (patch)
tree4dada65e46ce1aa06d4ea62f22b44f701fbaf6ca /thread_pthread_mn.c
parentd5af159556b63c97ee35199dd7c70b5127e58cb3 (diff)
Revert "Wake timer to create new SNT when needed for dedicated task (#16009)"
This reverts commit 7b3370a5579956404d742a2e104d72e7c89480e4.
Diffstat (limited to 'thread_pthread_mn.c')
-rw-r--r--thread_pthread_mn.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/thread_pthread_mn.c b/thread_pthread_mn.c
index d6602cea77..69e81e5fbc 100644
--- a/thread_pthread_mn.c
+++ b/thread_pthread_mn.c
@@ -394,14 +394,25 @@ nt_free_stack(void *mstack)
rb_native_mutex_unlock(&nt_machine_stack_lock);
}
+
static int
native_thread_check_and_create_shared(rb_vm_t *vm)
{
bool need_to_make = false;
- ractor_sched_lock(vm, NULL);
+ rb_native_mutex_lock(&vm->ractor.sched.lock);
{
- if (need_more_shared_native_threads_p(vm)) {
+ unsigned int schedulable_ractor_cnt = vm->ractor.cnt;
+ RUBY_ASSERT(schedulable_ractor_cnt >= 1);
+
+ if (!vm->ractor.main_ractor->threads.sched.enable_mn_threads)
+ schedulable_ractor_cnt--; // do not need snt for main ractor
+
+ unsigned int snt_cnt = vm->ractor.sched.snt_cnt;
+ if (((int)snt_cnt < MINIMUM_SNT) ||
+ (snt_cnt < schedulable_ractor_cnt &&
+ snt_cnt < vm->ractor.sched.max_cpu)) {
+
RUBY_DEBUG_LOG("added snt:%u dnt:%u ractor_cnt:%u grq_cnt:%u",
vm->ractor.sched.snt_cnt,
vm->ractor.sched.dnt_cnt,
@@ -415,7 +426,7 @@ native_thread_check_and_create_shared(rb_vm_t *vm)
RUBY_DEBUG_LOG("snt:%d ractor_cnt:%d", (int)vm->ractor.sched.snt_cnt, (int)vm->ractor.cnt);
}
}
- ractor_sched_unlock(vm, NULL);
+ rb_native_mutex_unlock(&vm->ractor.sched.lock);
if (need_to_make) {
struct rb_native_thread *nt = native_thread_alloc();