diff --git a/thread.c b/thread.c index 22b77b7f13..ddb4621ee2 100644 --- a/thread.c +++ b/thread.c @@ -1650,6 +1650,8 @@ rb_nogvl(void *(*func)(void *), void *data1, void *val = 0; rb_execution_context_t *ec = GET_EC(); rb_thread_t *th = rb_ec_thread_ptr(ec); + rb_vm_t *vm = rb_ec_vm_ptr(ec); + bool is_main_thread = vm->ractor.main_thread == th; int saved_errno = 0; VALUE ubf_th = Qfalse; @@ -1657,9 +1659,9 @@ rb_nogvl(void *(*func)(void *), void *data1, ubf = ubf_select; data2 = th; } - else if (ubf && rb_ractor_living_thread_num(th->ractor) == 1) { + else if (ubf && rb_ractor_living_thread_num(th->ractor) == 1 && is_main_thread) { if (flags & RB_NOGVL_UBF_ASYNC_SAFE) { - th->vm->ubf_async_safe = 1; + vm->ubf_async_safe = 1; } else { ubf_th = rb_thread_start_unblock_thread(); @@ -1671,7 +1673,7 @@ rb_nogvl(void *(*func)(void *), void *data1, saved_errno = errno; }, ubf, data2, flags & RB_NOGVL_INTR_FAIL); - th->vm->ubf_async_safe = 0; + if (is_main_thread) vm->ubf_async_safe = 0; if ((flags & RB_NOGVL_INTR_FAIL) == 0) { RUBY_VM_CHECK_INTS_BLOCKING(ec); diff --git a/version.h b/version.h index cd0c7b30cf..159c554b6d 100644 --- a/version.h +++ b/version.h @@ -12,11 +12,11 @@ # define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR #define RUBY_VERSION_TEENY 0 #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR -#define RUBY_PATCHLEVEL 38 +#define RUBY_PATCHLEVEL 40 #define RUBY_RELEASE_YEAR 2021 #define RUBY_RELEASE_MONTH 2 -#define RUBY_RELEASE_DAY 7 +#define RUBY_RELEASE_DAY 8 #include "ruby/version.h"