From 31b49050152367213e15b875c335dc314ea196e2 Mon Sep 17 00:00:00 2001 From: matz Date: Tue, 31 Jul 2001 06:24:45 +0000 Subject: * marshal.c (Init_marshal): new constant Marshal::MAJOR_VERSION and Marshal::MINOR_VERSION. * marshal.c (marshal_load): ruby_verbose test should be wrapped by RTEST(). * hash.c (rb_hash_index): should return nil (not the default value) if value is not in the hash. * numeric.c (num_div): new method added. alias to '/' which should be preserved even if '/' is redefined (e.g. by mathn). [new] * bignum.c (rb_cstr2inum): "0 ff".hex should return 0, not 255. * file.c (rb_file_s_expand_path): fixed using CharNext(). git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@1658 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/singleton.rb | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'lib/singleton.rb') diff --git a/lib/singleton.rb b/lib/singleton.rb index f5c2d8346..1945c4446 100644 --- a/lib/singleton.rb +++ b/lib/singleton.rb @@ -16,12 +16,18 @@ module Singleton klass.instance_eval %{ @__instance__ = nil def instance - unless @__instance__ + if defined? @__allocating__ + until @__instance__ + sleep 0.5 + end + elsif ! @__instance__ Thread.critical = true + @__allocating__ = true + Thread.critical = false begin - @__instance__ ||= new + @__instance__ = new ensure - Thread.critical = false + remove_instance_variable(:@__allocating__) end end return @__instance__ -- cgit