summaryrefslogtreecommitdiff
path: root/ractor.c
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2021-01-22 02:48:31 +0900
committerKoichi Sasada <ko1@atdot.net>2021-01-22 02:48:31 +0900
commit03d1850bfaa1c279fe5cc79f4bb2128f50c5b9e5 (patch)
treec4f0917e4b7fc5f8f7b5fb49ed2b0e4149196d72 /ractor.c
parentd961f14df3629f933613b062034deea0346de1cd (diff)
downloadruby-03d1850bfaa1c279fe5cc79f4bb2128f50c5b9e5.tar.gz
use ractor_wakeup()
Use ractor_wakeup() for same code.
Diffstat (limited to 'ractor.c')
-rw-r--r--ractor.c55
1 files changed, 27 insertions, 28 deletions
diff --git a/ractor.c b/ractor.c
index 420b2051b2..e43530610a 100644
--- a/ractor.c
+++ b/ractor.c
@@ -491,6 +491,31 @@ ractor_try_receive(rb_execution_context_t *ec, rb_ractor_t *r)
return ractor_basket_accept(&basket);
}
+static bool
+ractor_sleeping_by(const rb_ractor_t *r, enum ractor_wait_status wait_status)
+{
+ return (r->sync.wait.status & wait_status) && r->sync.wait.wakeup_status == wakeup_none;
+}
+
+static bool
+ractor_wakeup(rb_ractor_t *r, enum ractor_wait_status wait_status, enum ractor_wakeup_status wakeup_status)
+{
+ ASSERT_ractor_locking(r);
+
+ // fprintf(stderr, "%s r:%p status:%s/%s wakeup_status:%s/%s\n", __func__, r,
+ // wait_status_str(r->sync.wait.status), wait_status_str(wait_status),
+ // wakeup_status_str(r->sync.wait.wakeup_status), wakeup_status_str(wakeup_status));
+
+ if (ractor_sleeping_by(r, wait_status)) {
+ r->sync.wait.wakeup_status = wakeup_status;
+ rb_native_cond_signal(&r->sync.cond);
+ return true;
+ }
+ else {
+ return false;
+ }
+}
+
static void *
ractor_sleep_wo_gvl(void *ptr)
{
@@ -513,9 +538,8 @@ ractor_sleep_interrupt(void *ptr)
rb_ractor_t *r = ptr;
RACTOR_LOCK(r);
- if (r->sync.wait.wakeup_status == wakeup_none) {
- r->sync.wait.wakeup_status = wakeup_by_interrupt;
- rb_native_cond_signal(&r->sync.cond);
+ {
+ ractor_wakeup(r, wait_receiving | wait_taking | wait_yielding, wakeup_by_interrupt);
}
RACTOR_UNLOCK(r);
}
@@ -580,31 +604,6 @@ ractor_sleep(rb_execution_context_t *ec, rb_ractor_t *cr)
}
}
-static bool
-ractor_sleeping_by(const rb_ractor_t *r, enum ractor_wait_status wait_status)
-{
- return (r->sync.wait.status & wait_status) && r->sync.wait.wakeup_status == wakeup_none;
-}
-
-static bool
-ractor_wakeup(rb_ractor_t *r, enum ractor_wait_status wait_status, enum ractor_wakeup_status wakeup_status)
-{
- ASSERT_ractor_locking(r);
-
- // fprintf(stderr, "%s r:%p status:%s/%s wakeup_status:%s/%s\n", __func__, r,
- // wait_status_str(r->sync.wait.status), wait_status_str(wait_status),
- // wakeup_status_str(r->sync.wait.wakeup_status), wakeup_status_str(wakeup_status));
-
- if (ractor_sleeping_by(r, wait_status)) {
- r->sync.wait.wakeup_status = wakeup_status;
- rb_native_cond_signal(&r->sync.cond);
- return true;
- }
- else {
- return false;
- }
-}
-
static void
ractor_register_taking(rb_ractor_t *r, rb_ractor_t *cr)
{