diff options
author | rm155 <[email protected]> | 2021-08-18 16:51:13 -0400 |
---|---|---|
committer | Hiroshi SHIBATA <[email protected]> | 2024-10-01 17:59:42 +0900 |
commit | d0c1eef51174701889767e1fed584d2d56d9f9c9 (patch) | |
tree | 915fb3fb4e87c2f61b4dd515fe9d9703fda62e7d /lib/singleton.rb | |
parent | a6e96df573b8180568d7365a258dddc36a246fd1 (diff) |
[ruby/singleton] Only use RactorLocalSingleton if Ractor is defined
https://github.com/ruby/singleton/commit/f684d36a47
Diffstat (limited to 'lib/singleton.rb')
-rw-r--r-- | lib/singleton.rb | 60 |
1 files changed, 31 insertions, 29 deletions
diff --git a/lib/singleton.rb b/lib/singleton.rb index 4a47190e2b..924cbf1ae8 100644 --- a/lib/singleton.rb +++ b/lib/singleton.rb @@ -196,43 +196,45 @@ module Singleton # Returns the singleton instance. end -module RactorLocalSingleton - include Singleton::SingletonInstanceMethods - - module RactorLocalSingletonClassMethods - include Singleton::SingletonClassMethods - def instance - set_mutex(Thread::Mutex.new) if Ractor.current[mutex_key].nil? - return Ractor.current[instance_key] if Ractor.current[instance_key] - Ractor.current[mutex_key].synchronize { +if defined?(Ractor) + module RactorLocalSingleton + include Singleton::SingletonInstanceMethods + + module RactorLocalSingletonClassMethods + include Singleton::SingletonClassMethods + def instance + set_mutex(Thread::Mutex.new) if Ractor.current[mutex_key].nil? return Ractor.current[instance_key] if Ractor.current[instance_key] - set_instance(new()) - } - Ractor.current[instance_key] - end + Ractor.current[mutex_key].synchronize { + return Ractor.current[instance_key] if Ractor.current[instance_key] + set_instance(new()) + } + Ractor.current[instance_key] + end - private + private - def instance_key - :"__RactorLocalSingleton_instance_with_class_id_#{object_id}__" - end + def instance_key + :"__RactorLocalSingleton_instance_with_class_id_#{object_id}__" + end - def mutex_key - :"__RactorLocalSingleton_mutex_with_class_id_#{object_id}__" - end + def mutex_key + :"__RactorLocalSingleton_mutex_with_class_id_#{object_id}__" + end - def set_instance(val) - Ractor.current[instance_key] = val + def set_instance(val) + Ractor.current[instance_key] = val + end + + def set_mutex(val) + Ractor.current[mutex_key] = val + end end - def set_mutex(val) - Ractor.current[mutex_key] = val + def self.module_with_class_methods + RactorLocalSingletonClassMethods end - end - def self.module_with_class_methods - RactorLocalSingletonClassMethods + extend Singleton::SingletonClassProperties end - - extend Singleton::SingletonClassProperties end |