Project

General

Profile

Bug #12787

Stackoverflow over when alias_method and prepend are used in combination

Added by ethiraj (ethiraj srinivasan) almost 3 years ago. Updated 7 days ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:77386]

Description

With Ruby 2.0 Module#prepend was used to overcome the drawbacks of alias_method_chaining. Most of the gems/projects still use alias_method_chain since they support 1.9.3 and with upcoming gems/projects using prepend for the method that is already aliased throws stackoverflow error since the aliased method and prepend method call each other and results in deadlock.

class Netter
 def requester
  puts " I am requester in Netter"
 end
end
class Netter
  def requester_with_alias
    puts "i am in alias"
    requester_without_alias
  end
  alias_method :requester_without_alias, :requester
  alias_method :requester, :requester_with_alias
end
module Prepender
  def requester
    puts "i am in prepend"
    super
  end
end
Netter.prepend(Prepender)

Netter.new.requester

Files

stackoverflow_with_alias_and_prepend (404 Bytes) stackoverflow_with_alias_and_prepend ethiraj (ethiraj srinivasan), 09/24/2016 06:43 PM

History

Updated by shyouhei (Shyouhei Urabe) almost 3 years ago

  • Status changed from Open to Feedback

Which version of ruby are you using? because I can't reproduce the stack overflow using 2.3.1 on my machine.

% ruby -v ~/Downloads/stackoverflow_with_alias_and_prepend
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15]
i am in prepend
i am in alias
 I am requester in Netter
%
#2

Updated by jeremyevans0 (Jeremy Evans) 7 days ago

  • Status changed from Feedback to Closed

Also available in: Atom PDF