Skip to content
Snippets Groups Projects
Commit 213ee624 authored by Jacob Vosmaer's avatar Jacob Vosmaer
Browse files

Be careful when setting class instance vars

parent 0163e276
No related branches found
No related tags found
No related merge requests found
Loading
@@ -2,12 +2,23 @@ module Gitlab
Loading
@@ -2,12 +2,23 @@ module Gitlab
class Redis class Redis
attr_reader :url attr_reader :url
   
# To be thread-safe we must be careful when writing the class instance
# variables @url and @pool. Because @pool depends on @url we need two
# mutexes to prevent deadlock.
URL_MUTEX = Mutex.new
POOL_MUTEX = Mutex.new
private_constant :URL_MUTEX, :POOL_MUTEX
def self.url def self.url
@url ||= new.url @url || URL_MUTEX.synchronize { @url = new.url }
end end
   
def self.with def self.with
@pool ||= ConnectionPool.new { ::Redis.new(url: url) } if @pool.nil?
POOL_MUTEX.synchronize do
@pool = ConnectionPool.new { ::Redis.new(url: url) }
end
end
@pool.with { |redis| yield redis } @pool.with { |redis| yield redis }
end end
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment