From: merch-redmine@jeremyevans.net
To: ruby-dev@ruby-lang.org
Subject: [ruby-dev:51032] [Ruby master Bug#17494] ruby is hanged when using activesupport + rspec + rspec-parameterized
Date: Thu, 11 Mar 2021 00:01:09 +0000 (UTC) [thread overview]
Message-ID: <redmine.journal-90873.20210311000109.17960@ruby-lang.org> (raw)
In-Reply-To: <redmine.issue-17494.20201231114745.17960@ruby-lang.org>
Issue #17494 has been updated by jeremyevans0 (Jeremy Evans).
One possible workaround for this is a checking for an immediate loop in `resolve_refined_method`:
```diff
diff --git a/vm_method.c b/vm_method.c
index 2573e708ba..ebfe686a27 100644
--- a/vm_method.c
+++ b/vm_method.c
@@ -1245,7 +1245,7 @@ resolve_refined_method(VALUE refinements, const rb_method_entry_t *me, VALUE *de
{
while (me && me->def->type == VM_METHOD_TYPE_REFINED) {
VALUE refinement;
- const rb_method_entry_t *tmp_me;
+ const rb_method_entry_t *tmp_me, *prev_me = me;
VALUE super;
refinement = find_refinement(refinements, me->owner);
@@ -1269,6 +1269,9 @@ resolve_refined_method(VALUE refinements, const rb_method_entry_t *me, VALUE *de
}
me = search_method_protect(super, me->called_id, defined_class_ptr);
+ if (me == prev_me) {
+ return 0;
+ }
}
return me;
}
```
This fixes the case in the example, but maybe there are other more complex cases that it wouldn't catch. However, even if it won't catch all cases, until we have solved the underlying issue, this seems like a reasonable thing to add. I can submit a pull request for this if other committers are in favor.
----------------------------------------
Bug #17494: ruby is hanged when using activesupport + rspec + rspec-parameterized
https://bugs.ruby-lang.org/issues/17494#change-90873
* Author: sue445 (Go Sueyoshi)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.0.0p0
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN
----------------------------------------
# Example code
## Gemfile
```ruby
# frozen_string_literal: true
source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
gem "activesupport", "6.1.0"
gem "rspec", "3.10.0"
gem "rspec-parameterized", "0.4.2"
```
## spec file
``` ruby
require "active_support/all"
require "rspec-parameterized"
describe "CLI" do
subject do
# Expected error, but actual hunged here
cli.foo # <- hunged here
end
it { expect { subject }.to raise_error }
end
xdescribe "GitlabMrRelease::Project" do
describe "#api_version" do
using RSpec::Parameterized::TableSyntax
where(:api_endpoint, :expected) do
"http://example.com/api/v4/" | 4
end
with_them do
# it { should eq expected }
end
end
end
```
all codes are here.
https://github.com/sue445/ruby_3_0_0_bug_report_20201231
# Expected
spec is successful (This is the behavior up to ruby 2.7.2)
# Actual
hunged at line 7
--
https://bugs.ruby-lang.org/
next prev parent reply other threads:[~2021-03-11 0:01 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-31 11:47 [ruby-dev:50988] [Ruby master Bug#17494] ruby is hunged " sue445fukuoka
2021-01-01 7:34 ` [ruby-dev:50989] [Ruby master Bug#17494] ruby is hanged " yasuo.honda
2021-01-22 5:41 ` [ruby-dev:50991] " sue445fukuoka
2021-01-22 16:32 ` [ruby-dev:50992] " alpaca-tc
2021-01-25 0:42 ` [ruby-dev:50996] " shyouhei
2021-01-25 8:51 ` [ruby-dev:50997] " nobu
2021-01-26 0:45 ` [ruby-dev:50998] " nobu
2021-01-26 5:32 ` [ruby-dev:50999] " yasuo.honda
2021-03-11 0:01 ` merch-redmine [this message]
2021-07-01 21:44 ` [ruby-dev:51074] " merch-redmine
2021-07-03 3:15 ` [ruby-dev:51075] " nagachika00
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=redmine.journal-90873.20210311000109.17960@ruby-lang.org \
--to=merch-redmine@jeremyevans.net \
--cc=ruby-dev@ruby-lang.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).