summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Patterson <[email protected]>2022-08-23 13:23:40 -0700
committerAaron Patterson <[email protected]>2022-08-24 10:54:27 -0700
commit28a3434634a0116a6f2b9e2df0bcbbfb0cfbd28b (patch)
treed2a62aa0e4808343a8b9b0b2156e70f6838e4be6
parentfa9f4d387c2a46553051f01f4a28ae17d874e4c7 (diff)
Disable Ractor check on 32bit architectures
Ractor verification requires storing the ractor id in the top 32 bits of the object header. Unfortunately 32 bit machines only have 32 bits in the object header. The verification code has a 32 bit left shift which doesn't work on i686 and will clobber existing flags. This commit disables the verification code on i686 since i686 will crash if it's enabled. Co-Authored-By: John Hawthorn <[email protected]> Co-Authored-By: Jemma Issroff <[email protected]>
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/6279
-rw-r--r--ractor.c4
-rw-r--r--ractor_core.h2
2 files changed, 5 insertions, 1 deletions
diff --git a/ractor.c b/ractor.c
index 0306736c18..0eddc165fa 100644
--- a/ractor.c
+++ b/ractor.c
@@ -74,7 +74,9 @@ static void
ractor_lock_self(rb_ractor_t *cr, const char *file, int line)
{
VM_ASSERT(cr == GET_RACTOR());
+#if RACTOR_CHECK_MODE > 0
VM_ASSERT(cr->sync.locked_by != cr->pub.self);
+#endif
ractor_lock(cr, file, line);
}
@@ -94,7 +96,9 @@ static void
ractor_unlock_self(rb_ractor_t *cr, const char *file, int line)
{
VM_ASSERT(cr == GET_RACTOR());
+#if RACTOR_CHECK_MODE > 0
VM_ASSERT(cr->sync.locked_by == cr->pub.self);
+#endif
ractor_unlock(cr, file, line);
}
diff --git a/ractor_core.h b/ractor_core.h
index 412971decf..a065f5f809 100644
--- a/ractor_core.h
+++ b/ractor_core.h
@@ -5,7 +5,7 @@
#include "vm_debug.h"
#ifndef RACTOR_CHECK_MODE
-#define RACTOR_CHECK_MODE (0 || VM_CHECK_MODE || RUBY_DEBUG)
+#define RACTOR_CHECK_MODE (VM_CHECK_MODE || RUBY_DEBUG) && (SIZEOF_UINT64_T == SIZEOF_VALUE)
#endif
enum rb_ractor_basket_type {