summaryrefslogtreecommitdiff
path: root/ractor.c
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2020-12-02 23:38:40 -0800
committerTakashi Kokubun <takashikkbn@gmail.com>2020-12-02 23:38:42 -0800
commit58c3c75fee775abb9a145e7b106320a55f2c8be1 (patch)
tree6a443cdbc3f7247b564ae7688ace103e1d8db9b7 /ractor.c
parent29c9588e7ec4fcc36c91b3783dfbfe86a4d104bf (diff)
Skip checking Ractor recursive locking
for an MJIT worker thread. We can't do it because its GET_EC() returns NULL.
Diffstat (limited to 'ractor.c')
-rw-r--r--ractor.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/ractor.c b/ractor.c
index fcdf5cf14a..f17a75bc3f 100644
--- a/ractor.c
+++ b/ractor.c
@@ -40,7 +40,8 @@ static void
ASSERT_ractor_unlocking(rb_ractor_t *r)
{
#if RACTOR_CHECK_MODE > 0
- if (r->locked_by == GET_RACTOR()->self) {
+ // GET_EC is NULL in an MJIT worker
+ if (GET_EC() != NULL && r->locked_by == GET_RACTOR()->self) {
rb_bug("recursive ractor locking");
}
#endif
@@ -50,7 +51,8 @@ static void
ASSERT_ractor_locking(rb_ractor_t *r)
{
#if RACTOR_CHECK_MODE > 0
- if (r->locked_by != GET_RACTOR()->self) {
+ // GET_EC is NULL in an MJIT worker
+ if (GET_EC() != NULL && r->locked_by != GET_RACTOR()->self) {
rp(r->locked_by);
rb_bug("ractor lock is not acquired.");
}
@@ -66,7 +68,9 @@ ractor_lock(rb_ractor_t *r, const char *file, int line)
rb_native_mutex_lock(&r->lock);
#if RACTOR_CHECK_MODE > 0
- r->locked_by = GET_RACTOR()->self;
+ if (GET_EC() != NULL) { // GET_EC is NULL in an MJIT worker
+ r->locked_by = GET_RACTOR()->self;
+ }
#endif
RUBY_DEBUG_LOG2(file, line, "locked r:%u%s", r->id, GET_RACTOR() == r ? " (self)" : "");