diff --git a/lib/faraday/adapter.rb b/lib/faraday/adapter.rb index 407c2367f..535ecb514 100644 --- a/lib/faraday/adapter.rb +++ b/lib/faraday/adapter.rb @@ -33,6 +33,7 @@ def supports_parallel? def inherited(subclass) super + subclass.middleware_mutex subclass.supports_parallel = supports_parallel? end end diff --git a/lib/faraday/middleware.rb b/lib/faraday/middleware.rb index 5bbe4a0e1..03c44bf50 100644 --- a/lib/faraday/middleware.rb +++ b/lib/faraday/middleware.rb @@ -17,5 +17,11 @@ def close warn "#{@app} does not implement \#close!" end end + + def self.inherited(subclass) + super + subclass.send(:load_error=, load_error) # DependencyLoader.inherited + subclass.middleware_mutex + end end end diff --git a/lib/faraday/middleware_registry.rb b/lib/faraday/middleware_registry.rb index 021038fec..692d0a0cf 100644 --- a/lib/faraday/middleware_registry.rb +++ b/lib/faraday/middleware_registry.rb @@ -6,6 +6,11 @@ module Faraday # Adds the ability for other modules to register and lookup # middleware classes. module MiddlewareRegistry + def self.extended(klass) + super + klass.middleware_mutex + end + # Register middleware class(es) on the current module. # # @param autoload_path [String] Middleware autoload path @@ -92,8 +97,9 @@ def lookup_middleware(key) end def middleware_mutex(&block) + puts "#{self}: middleware_mutex" if @middleware_mutex.nil? @middleware_mutex ||= Monitor.new - @middleware_mutex.synchronize(&block) + @middleware_mutex.synchronize(&block) if block end def fetch_middleware(key)