diff --git a/ractor.c b/ractor.c index 23b3ca98f3..cd1a15eb2b 100644 --- a/ractor.c +++ b/ractor.c @@ -2120,34 +2120,23 @@ rb_ractor_living_thread_num(const rb_ractor_t *r) return r->threads.cnt; } +// only for current ractor VALUE -rb_ractor_thread_list(rb_ractor_t *r) +rb_ractor_thread_list(void) { + rb_ractor_t *r = GET_RACTOR(); rb_thread_t *th = 0; - VALUE *ts; - int ts_cnt; - - RACTOR_LOCK(r); - { - ts = ALLOCA_N(VALUE, r->threads.cnt); - ts_cnt = 0; - - ccan_list_for_each(&r->threads.set, th, lt_node) { - switch (th->status) { - case THREAD_RUNNABLE: - case THREAD_STOPPED: - case THREAD_STOPPED_FOREVER: - ts[ts_cnt++] = th->self; - default: - break; - } - } - } - RACTOR_UNLOCK(r); - VALUE ary = rb_ary_new(); - for (int i=0; ithreads.set, th, lt_node) { + switch (th->status) { + case THREAD_RUNNABLE: + case THREAD_STOPPED: + case THREAD_STOPPED_FOREVER: + rb_ary_push(ary, th->self); + default: + break; + } } return ary; diff --git a/ractor_core.h b/ractor_core.h index 1b9003b6d8..db5b0c77c7 100644 --- a/ractor_core.h +++ b/ractor_core.h @@ -209,7 +209,7 @@ void rb_ractor_send_parameters(rb_execution_context_t *ec, rb_ractor_t *g, VALUE VALUE rb_thread_create_ractor(rb_ractor_t *g, VALUE args, VALUE proc); // defined in thread.c int rb_ractor_living_thread_num(const rb_ractor_t *); -VALUE rb_ractor_thread_list(rb_ractor_t *r); +VALUE rb_ractor_thread_list(void); bool rb_ractor_p(VALUE rv); void rb_ractor_living_threads_init(rb_ractor_t *r); diff --git a/thread.c b/thread.c index 81be9fb03b..57bd2e0d9c 100644 --- a/thread.c +++ b/thread.c @@ -2728,7 +2728,7 @@ VALUE rb_thread_list(void) { // TODO - return rb_ractor_thread_list(GET_RACTOR()); + return rb_ractor_thread_list(); } /*