summaryrefslogtreecommitdiff
path: root/lib/singleton.rb
diff options
context:
space:
mode:
authorrm155 <[email protected]>2021-08-18 16:51:13 -0400
committerHiroshi SHIBATA <[email protected]>2024-10-01 17:59:42 +0900
commitd0c1eef51174701889767e1fed584d2d56d9f9c9 (patch)
tree915fb3fb4e87c2f61b4dd515fe9d9703fda62e7d /lib/singleton.rb
parenta6e96df573b8180568d7365a258dddc36a246fd1 (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.rb60
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