aboutsummaryrefslogtreecommitdiffstats
path: root/ractor_core.h
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2020-12-08 00:42:20 +0900
committerKoichi Sasada <ko1@atdot.net>2020-12-09 01:40:38 +0900
commitee194af2aa170c0cb1bfd5fed4e84259a8150ece (patch)
treea65ce548fade86f8daddd6af525f4c665ca2f97d /ractor_core.h
parent2749123e213007e20d2f5e65ce941ff53feb4c76 (diff)
downloadruby-ee194af2aa170c0cb1bfd5fed4e84259a8150ece.tar.gz
re-layout rb_ractor_t
separate synchronization data and ractor local data.
Diffstat (limited to 'ractor_core.h')
-rw-r--r--ractor_core.h19
1 files changed, 10 insertions, 9 deletions
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;