diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1999-01-20 04:59:39 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1999-01-20 04:59:39 +0000 |
commit | 210367ec889f5910e270d6ea2c7ddb8a8d939e61 (patch) | |
tree | feb35473da45947378fbc02defe39bcd79ef600e /lib/mutex_m.rb | |
parent | 9c5b1986a36c7a700b4c76817e35aa874ba7907c (diff) | |
download | ruby-210367ec889f5910e270d6ea2c7ddb8a8d939e61.tar.gz |
This commit was generated by cvs2svn to compensate for changes in r372,
which included commits to RCS files with non-trunk default branches.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@373 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/mutex_m.rb')
-rw-r--r-- | lib/mutex_m.rb | 60 |
1 files changed, 48 insertions, 12 deletions
diff --git a/lib/mutex_m.rb b/lib/mutex_m.rb index 823888e72f..4b8d64438e 100644 --- a/lib/mutex_m.rb +++ b/lib/mutex_m.rb @@ -1,8 +1,8 @@ # # mutex_m.rb - # $Release Version: 2.0$ -# $Revision: 1.2 $ -# $Date: 1997/07/25 02:43:21 $ +# $Revision: 1.7 $ +# $Date: 1998/02/27 04:28:57 $ # Original from mutex.rb # by Keiju ISHITSUKA(SHL Japan Inc.) # @@ -18,21 +18,50 @@ require "finalize" module Mutex_m - def Mutex_m.extend_object(obj) + def Mutex_m.extendable_module(obj) if Fixnum === obj or TRUE === obj or FALSE === obj or nil == obj raise TypeError, "Mutex_m can't extend to this class(#{obj.type})" else begin - eval "class << obj - @mu_locked - end" - obj.extend(For_primitive_object) + obj.instance_eval "@mu_locked" + For_general_object rescue TypeError - obj.extend(For_general_object) + For_primitive_object end end end + def Mutex_m.includable_module(cl) + begin + dummy = cl.new + Mutex_m.extendable_module(dummy) + rescue NameError + # new���������Ƥ��ʤ�����, DATA�Ȥߤʤ�. + For_primitive_object + end + end + + def Mutex_m.extend_class(cl) + return super if cl.instance_of?(Module) + + # �⥸�塼��λ��ϲ��⤷�ʤ�. ���饹�ξ��, Ŭ�ڤʥ⥸�塼��η��� + # ��alias��Ԥ�. + real = includable_module(cl) + cl.module_eval %q{ + include real + + alias locked? mu_locked? + alias lock mu_lock + alias unlock mu_unlock + alias try_lock mu_try_lock + alias synchronize mu_synchronize + } + end + + def Mutex_m.extend_object(obj) + obj.extend(Mutex_m.extendable_module(obj)) + end + def mu_extended unless (defined? locked? and defined? lock and @@ -40,7 +69,7 @@ module Mutex_m defined? try_lock and defined? synchronize) eval "class << self - alias locked mu_locked? + alias locked? mu_locked? alias lock mu_lock alias unlock mu_unlock alias try_lock mu_try_lock @@ -49,6 +78,7 @@ module Mutex_m end end + # locking def mu_synchronize begin mu_lock @@ -58,6 +88,7 @@ module Mutex_m end end + # internal class module For_general_object include Mutex_m @@ -118,10 +149,16 @@ module Mutex_m def For_primitive_object.extend_object(obj) super + obj.mu_extended Finalizer.add(obj, For_primitive_object, :mu_finalize) end + def mu_extended + super + initialize + end + def For_primitive_object.mu_finalize(id) Thread.critical = TRUE if wait = Mu_Locked.delete(id) @@ -146,7 +183,7 @@ module Mutex_m ret = FALSE else Mu_Locked[self.id] = [] - Finalizer.set(self, For_primitive_object, :mu_delete_Locked) + Finalizer.add(self, For_primitive_object, :mu_finalize) ret = TRUE end Thread.critical = FALSE @@ -159,7 +196,7 @@ module Mutex_m Thread.stop end Mu_Locked[self.id] = [] - Finalizer.add(self, For_primitive_object, :mu_delete_Locked) + Finalizer.add(self, For_primitive_object, :mu_finalize) Thread.critical = FALSE self end @@ -180,4 +217,3 @@ module Mutex_m end end - |