Bug #6867

super in a Mutex#synchronize block

Added by Benoit Daloze over 1 year ago. Updated about 1 year ago.

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

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

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

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

History

#1 Updated by Tomoyuki Chikanaga over 1 year ago

Hi,

This issue seems happen after r36640.

#2 Updated by Aaron Patterson over 1 year 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.

#3 Updated by Shugo Maeda over 1 year ago

  • Status changed from Open to Assigned
  • Assignee changed from Shugo Maeda to 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?

#4 Updated by Yusuke Endoh about 1 year ago

  • Status changed from Assigned to Closed

The patch was applied at r36784.

Yusuke Endoh mame@tsg.ne.jp

Also available in: Atom PDF