ruby-dev (Japanese) list archive (unofficial mirror)
 help / color / mirror / Atom feed
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/

  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).