Project

General

Profile

Actions

Bug #6867

closed

super in a Mutex#synchronize block

Added by Eregon (Benoit Daloze) over 12 years ago. Updated almost 12 years ago.

Status:
Closed
Target version:
ruby -v:
ruby 2.0.0dev (2012-08-14 trunk 36700) [x86_64-darwin10.8.0]
Backport:
[ruby-core:47186]

Description

The following code:

require 'thread'

class Parent
def meth
end
end

class Child < Parent
def meth
Mutex.new.synchronize do
super
end
end
end

Child.new.meth

raises

bug_super.rb:13:in block in meth': can't find the method for super, which may be called in an orphan block (NoMethodError) from <internal:prelude>:10:in synchronize'
from bug_super.rb:12:in meth' from bug_super.rb:18:in '

I met the bug with the listen gem: https://github.com/guard/listen/blob/master/lib/listen/adapters/darwin.rb#L22-25 .


Files

fix.patch (1.79 KB) fix.patch tenderlovemaking (Aaron Patterson), 08/21/2012 02:41 AM

Updated by nagachika (Tomoyuki Chikanaga) over 12 years ago

Hi,

This issue seems happen after r36640.

Updated by tenderlovemaking (Aaron Patterson) over 12 years ago

I'm hitting this bug in the Rails tests too. It does not need to be a synchronize block. Any method that yields will cause this error:

class A; def self.yielder; yield; end end

class X
  def self.hello; 'hi'; end
end

class Y < X
  def self.hello; A.yielder { super() }; end
end

Y.hello

I've attached a patch with a test and fix. It seems that the loop that walks up the control frames would stop even though there is a valid recipient for that method further up the stack. I'm not incredibly pleased with my patch because it has to do a kind_of for each object as it walks up, but it does fix this bug.

Shugo - do you have a better fix for this, or may I apply this patch?

Thanks.

Updated by shugo (Shugo Maeda) over 12 years ago

  • Status changed from Open to Assigned
  • Assignee changed from shugo (Shugo Maeda) to tenderlovemaking (Aaron Patterson)

tenderlovemaking (Aaron Patterson) wrote:

Shugo - do you have a better fix for this, or may I apply this patch?

I haven't come up with a better solution. Could you apply the patch?

Updated by mame (Yusuke Endoh) almost 12 years ago

  • Status changed from Assigned to Closed

The patch was applied at r36784.

--
Yusuke Endoh

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0