summaryrefslogtreecommitdiff
path: root/test
diff options
authornagachika <[email protected]>2025-03-16 18:52:56 +0900
committernagachika <[email protected]>2025-03-16 18:52:56 +0900
commit2b2ab1a67c236eb0c47e63e8adcf877b0d20a38c (patch)
treec88d8866b52ba6a4c3d7e2d71a27b80c9aa0bb4a /test
parentd213eb7f453fa0bd6c476826c450d9726c3c8b15 (diff)
merge revision(s) 08b3a45bc97c835b4677bf76dbce68fd51d81897: [Backport #21180]
Push a real iseq in rb_vm_push_frame_fname() Previously, vm_make_env_each() (used during proc creation and for the debug inspector C API) picked up the non-GC-allocated iseq that rb_vm_push_frame_fname() creates, which led to a SEGV when the GC tried to mark the non GC object. Put a real iseq imemo instead. Speed should be about the same since the old code also did a imemo allocation and a malloc allocation. Real iseq allows ironing out the special-casing of dummy frames in rb_execution_context_mark() and rb_execution_context_update(). A check is added to RubyVM::ISeq#eval, though, to stop attempts to run dummy iseqs. [Bug #21180] Co-authored-by: Aaron Patterson <[email protected]>
Diffstat (limited to 'test')
-rw-r--r--test/fiber/test_scheduler.rb13
1 files changed, 13 insertions, 0 deletions
diff --git a/test/fiber/test_scheduler.rb b/test/fiber/test_scheduler.rb
index 62424fc489..81d4581bea 100644
--- a/test/fiber/test_scheduler.rb
+++ b/test/fiber/test_scheduler.rb
@@ -139,6 +139,19 @@ class TestFiberScheduler < Test::Unit::TestCase
end
end
+ def test_iseq_compile_under_gc_stress_bug_21180
+ Thread.new do
+ scheduler = Scheduler.new
+ Fiber.set_scheduler scheduler
+
+ Fiber.schedule do
+ EnvUtil.under_gc_stress do
+ RubyVM::InstructionSequence.compile_file(File::NULL)
+ end
+ end
+ end.join
+ end
+
def test_deadlock
mutex = Thread::Mutex.new
condition = Thread::ConditionVariable.new