From 11421415caf9839218f7a437b116495cb2552b24 Mon Sep 17 00:00:00 2001 From: Ilmari Karonen Date: Thu, 31 Aug 2023 14:16:22 +0300 Subject: [PATCH 1/2] Avoid possible redundant database initialization from multiple threads --- lib/mini_mime.rb | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/mini_mime.rb b/lib/mini_mime.rb index eadde55..2d21da8 100644 --- a/lib/mini_mime.rb +++ b/lib/mini_mime.rb @@ -50,6 +50,12 @@ def binary? end class Db + LOCK = Mutex.new + + def self.db + @db || LOCK.synchronize { @db ||= new } + end + def self.lookup_by_filename(filename) extension = File.extname(filename) return if extension.empty? @@ -58,14 +64,11 @@ def self.lookup_by_filename(filename) end def self.lookup_by_extension(extension) - @db ||= new - @db.lookup_by_extension(extension) || - @db.lookup_by_extension(extension.downcase) + db.lookup_by_extension(extension) || db.lookup_by_extension(extension.downcase) end def self.lookup_by_content_type(content_type) - @db ||= new - @db.lookup_by_content_type(content_type) + db.lookup_by_content_type(content_type) end class Cache From 35e98f6824a86b94fba8cd4afae529d05ce79498 Mon Sep 17 00:00:00 2001 From: Ilmari Karonen Date: Thu, 31 Aug 2023 14:28:37 +0300 Subject: [PATCH 2/2] Silence "instance variable @db not initialized" warning --- lib/mini_mime.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/mini_mime.rb b/lib/mini_mime.rb index 2d21da8..874a7d5 100644 --- a/lib/mini_mime.rb +++ b/lib/mini_mime.rb @@ -51,6 +51,7 @@ def binary? class Db LOCK = Mutex.new + @db = nil def self.db @db || LOCK.synchronize { @db ||= new }