Stackoverflow over when alias_method and prepend are used in combination
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
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 %