diff options
| author | Alan Wu <XrXr@users.noreply.github.com> | 2025-03-10 22:37:44 -0400 |
|---|---|---|
| committer | Alan Wu <XrXr@users.noreply.github.com> | 2025-03-12 15:00:26 -0400 |
| commit | 08b3a45bc97c835b4677bf76dbce68fd51d81897 (patch) | |
| tree | 6ed517372f764d8cf9da9212b5428307b8471e73 /test | |
| parent | 9b9661883b1e2cc85b1341d804b106885432d2bd (diff) | |
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 <tenderlove@ruby-lang.org>
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/12898
Diffstat (limited to 'test')
| -rw-r--r-- | test/fiber/test_scheduler.rb | 13 |
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 |
