summaryrefslogtreecommitdiff
path: root/test/objspace
diff options
context:
space:
mode:
authorKJ Tsanaktsidis <ktsanaktsidis@zendesk.com>2022-01-08 15:21:46 +1100
committerJean Boussier <jean.boussier@gmail.com>2023-03-09 09:46:14 +0100
commit7bd7aee02e303de27d2cddfc5ef47e612d6782cb (patch)
tree6a99218d99f8e2b21235d0d3e473b40e3268fef2 /test/objspace
parent1a0d3ec4b9bfca2c06abc2909dd1dd15308943fb (diff)
downloadruby-7bd7aee02e303de27d2cddfc5ef47e612d6782cb.tar.gz
Fix interpreter crash caused by RUBY_INTERNAL_EVENT_NEWOBJ + Ractors
When a Ractor is created whilst a tracepoint for RUBY_INTERNAL_EVENT_NEWOBJ is active, the interpreter crashes. This is because during the early setup of the Ractor, the stdio objects are created, which allocates Ruby objects, which fires the tracepoint. However, the tracepoint machinery tries to dereference the control frame (ec->cfp->pc), which isn't set up yet and so crashes with a null pointer dereference. Fix this by not firing GC tracepoints if cfp isn't yet set up.
Diffstat (limited to 'test/objspace')
-rw-r--r--test/objspace/test_ractor.rb17
1 files changed, 17 insertions, 0 deletions
diff --git a/test/objspace/test_ractor.rb b/test/objspace/test_ractor.rb
new file mode 100644
index 0000000000..b7008ea731
--- /dev/null
+++ b/test/objspace/test_ractor.rb
@@ -0,0 +1,17 @@
+require "test/unit"
+
+class TestObjSpaceRactor < Test::Unit::TestCase
+ def test_tracing_does_not_crash
+ assert_ractor(<<~RUBY, require: 'objspace')
+ ObjectSpace.trace_object_allocations do
+ r = Ractor.new do
+ obj = 'a' * 1024
+ Ractor.yield obj
+ end
+
+ r.take
+ r.take
+ end
+ RUBY
+ end
+end