From fb085aeb4ebc0bbf609fee747fc3930b51d9f00c Mon Sep 17 00:00:00 2001 From: rick olson Date: Wed, 13 Nov 2019 11:09:53 -0700 Subject: [PATCH 1/2] Set middleware_mutex when middleware/adapter classes are defined --- lib/faraday/adapter.rb | 1 + lib/faraday/middleware.rb | 6 ++++++ lib/faraday/middleware_registry.rb | 8 +++++++- 3 files changed, 14 insertions(+), 1 deletion(-) 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) From 25ed0656f4286879be22c2e2d661edad63d7a5db Mon Sep 17 00:00:00 2001 From: Olle Jonsson Date: Fri, 27 Mar 2020 22:39:07 +0100 Subject: [PATCH 2/2] Dedicate a method to initialize middleware mutex --- lib/faraday/adapter.rb | 2 +- lib/faraday/middleware.rb | 2 +- lib/faraday/middleware_registry.rb | 9 ++++++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/faraday/adapter.rb b/lib/faraday/adapter.rb index 535ecb514..565c49027 100644 --- a/lib/faraday/adapter.rb +++ b/lib/faraday/adapter.rb @@ -33,7 +33,7 @@ def supports_parallel? def inherited(subclass) super - subclass.middleware_mutex + subclass.init_mutex subclass.supports_parallel = supports_parallel? end end diff --git a/lib/faraday/middleware.rb b/lib/faraday/middleware.rb index 03c44bf50..6400bc913 100644 --- a/lib/faraday/middleware.rb +++ b/lib/faraday/middleware.rb @@ -21,7 +21,7 @@ def close def self.inherited(subclass) super subclass.send(:load_error=, load_error) # DependencyLoader.inherited - subclass.middleware_mutex + subclass.init_mutex end end end diff --git a/lib/faraday/middleware_registry.rb b/lib/faraday/middleware_registry.rb index 692d0a0cf..5fefaffd5 100644 --- a/lib/faraday/middleware_registry.rb +++ b/lib/faraday/middleware_registry.rb @@ -8,7 +8,7 @@ module Faraday module MiddlewareRegistry def self.extended(klass) super - klass.middleware_mutex + klass.init_mutex end # Register middleware class(es) on the current module. @@ -96,10 +96,13 @@ def lookup_middleware(key) raise(Faraday::Error, "#{key.inspect} is not registered on #{self}") end + def init_mutex + @middleware_mutex = Monitor.new + end + def middleware_mutex(&block) puts "#{self}: middleware_mutex" if @middleware_mutex.nil? - @middleware_mutex ||= Monitor.new - @middleware_mutex.synchronize(&block) if block + @middleware_mutex.synchronize(&block) end def fetch_middleware(key)