summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ractor.c35
-rw-r--r--ractor_core.h2
-rw-r--r--thread.c2
3 files changed, 14 insertions, 25 deletions
diff --git a/ractor.c b/ractor.c
index 23b3ca98f3..cd1a15eb2b 100644
--- a/ractor.c
+++ b/ractor.c
@@ -2120,35 +2120,24 @@ 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;
+ VALUE ary = rb_ary_new();
- 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;
- }
+ ccan_list_for_each(&r->threads.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;
}
}
- RACTOR_UNLOCK(r);
-
- VALUE ary = rb_ary_new();
- for (int i=0; i<ts_cnt; i++) {
- rb_ary_push(ary, ts[i]);
- }
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();
}
/*