mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
mjit.c: don't let MJIT.pause hang on full active units
test/ruby/test_rubyvm_mjit.rb: add reproductive test [Bug #15071] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65179 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
1a7249bc03
commit
320d7c54ba
2 changed files with 13 additions and 1 deletions
2
mjit.c
2
mjit.c
|
@ -647,7 +647,7 @@ mjit_pause(int wait_p)
|
|||
tv.tv_sec = 0;
|
||||
tv.tv_usec = 1000;
|
||||
|
||||
while (unit_queue.length > 0) {
|
||||
while (unit_queue.length > 0 && active_units.length < mjit_opts.max_cache_size) { /* inverse of condition that waits for mjit_worker_wakeup */
|
||||
CRITICAL_SECTION_START(3, "in mjit_pause for a worker wakeup");
|
||||
rb_native_cond_broadcast(&mjit_worker_wakeup);
|
||||
CRITICAL_SECTION_FINISH(3, "in mjit_pause for a worker wakeup");
|
||||
|
|
|
@ -33,6 +33,18 @@ class TestRubyVMMJIT < Test::Unit::TestCase
|
|||
)
|
||||
end
|
||||
|
||||
def test_pause_does_not_hang_on_full_units
|
||||
out, _ = eval_with_jit(<<~'EOS', verbose: 1, min_calls: 1, max_cache: 10, wait: false)
|
||||
i = 0
|
||||
while i < 11
|
||||
eval("def mjit#{i}; end; mjit#{i}")
|
||||
i += 1
|
||||
end
|
||||
print RubyVM::MJIT.pause
|
||||
EOS
|
||||
assert_equal('true', out)
|
||||
end
|
||||
|
||||
def test_pause_wait_false
|
||||
out, err = eval_with_jit(<<~'EOS', verbose: 1, min_calls: 1, wait: false)
|
||||
i = 0
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue