From ee194af2aa170c0cb1bfd5fed4e84259a8150ece Mon Sep 17 00:00:00 2001 From: Koichi Sasada Date: Tue, 8 Dec 2020 00:42:20 +0900 Subject: re-layout rb_ractor_t separate synchronization data and ractor local data. --- ractor_core.h | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'ractor_core.h') diff --git a/ractor_core.h b/ractor_core.h index 3f367ad559..c97dfcc85f 100644 --- a/ractor_core.h +++ b/ractor_core.h @@ -36,23 +36,20 @@ struct rb_ractor_waiting_list { rb_ractor_t **ractors; }; -struct rb_random_struct; // c.f. ruby/random.h - -struct rb_ractor_struct { +struct rb_ractor_sync { // ractor lock rb_nativethread_lock_t lock; #if RACTOR_CHECK_MODE > 0 VALUE locked_by; #endif + rb_nativethread_cond_t cond; // communication struct rb_ractor_queue incoming_queue; + struct rb_ractor_waiting_list taking_ractors; bool incoming_port_closed; bool outgoing_port_closed; - bool yield_atexit; - - struct rb_ractor_waiting_list taking_ractors; struct ractor_wait { enum ractor_wait_status { @@ -72,11 +69,15 @@ struct rb_ractor_struct { wakeup_by_retry, } wakeup_status; - struct rb_ractor_basket taken_basket; struct rb_ractor_basket yielded_basket; - - rb_nativethread_cond_t cond; + struct rb_ractor_basket taken_basket; } wait; +}; + +struct rb_ractor_struct { + struct rb_ractor_sync sync; + + bool yield_atexit; // vm wide barrier synchronization rb_nativethread_cond_t barrier_wait_cond; -- cgit v1.2.1