diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-07-31 06:24:45 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-07-31 06:24:45 +0000 |
commit | c8a7361e45e3a149b970ae9cd74cbbcfbfd1d501 (patch) | |
tree | a5a31be3a7d007d806afa07b04e7c9d9d5662b8d /lib/singleton.rb | |
parent | 645170199ca8d9f7eaa8f928519897d2d1ed709d (diff) |
* 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: svn+ssh://ci.ruby-lang.org/ruby/trunk@1658 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/singleton.rb')
-rw-r--r-- | lib/singleton.rb | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/singleton.rb b/lib/singleton.rb index f5c2d8346b..1945c4446b 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__ |