ruby-changes:2418
From: ko1@a...
Date: 13 Nov 2007 22:04:44 +0900
Subject: [ruby-changes:2418] seki - Ruby:r13909 (ruby_1_8): remove Thread.exclusive
seki 2007-11-13 22:04:30 +0900 (Tue, 13 Nov 2007) New Revision: 13909 Modified files: branches/ruby_1_8/ChangeLog branches/ruby_1_8/lib/drb/drb.rb branches/ruby_1_8/lib/drb/extservm.rb Log: remove Thread.exclusive http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/lib/drb/extservm.rb?r1=13909&r2=13908 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=13909&r2=13908 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/lib/drb/drb.rb?r1=13909&r2=13908 Index: ruby_1_8/ChangeLog =================================================================== --- ruby_1_8/ChangeLog (revision 13908) +++ ruby_1_8/ChangeLog (revision 13909) @@ -1,3 +1,9 @@ +Tue Nov 13 22:02:23 2007 Masatoshi SEKI <m_seki@m...> + + * lib/drb/drb.rb: remove Thread.exclusive. + + * lib/drb/extservm.rb: ditto. + Tue Nov 13 16:33:07 2007 Nobuyoshi Nakada <nobu@r...> * numeric.c (flodivmod): work around for inifinity. Index: ruby_1_8/lib/drb/extservm.rb =================================================================== --- ruby_1_8/lib/drb/extservm.rb (revision 13908) +++ ruby_1_8/lib/drb/extservm.rb (revision 13909) @@ -5,10 +5,12 @@ require 'drb/drb' require 'thread' +require 'monitor' module DRb class ExtServManager include DRbUndumped + include MonitorMixin @@command = {} @@ -21,6 +23,8 @@ end def initialize + super() + @cond = new_cond @servers = {} @waiting = [] @queue = Queue.new @@ -30,34 +34,26 @@ attr_accessor :uri def service(name) - while true - server = nil - Thread.exclusive do - server = @servers[name] if @servers[name] - end - return server if server && server.alive? - invoke_service(name) + synchronize do + while true + server = @servers[name] + return server if server && server.alive? + invoke_service(name) + @cond.wait + end end end def regist(name, ro) - ary = nil - Thread.exclusive do - @servers[name] = ro - ary = @waiting - @waiting = [] + synchronize do + @servers[name] = ro + @cond.signal end - ary.each do |th| - begin - th.run - rescue ThreadError - end - end self end def unregist(name) - Thread.exclusive do + synchronize do @servers.delete(name) end end @@ -73,16 +69,12 @@ end def invoke_service(name) - Thread.exclusive do - @waiting.push Thread.current - @queue.push name - Thread.stop - end + @queue.push(name) end def invoke_service_command(name, command) raise "invalid command. name: #{name}" unless command - Thread.exclusive do + synchronize do return if @servers.include?(name) @servers[name] = false end Index: ruby_1_8/lib/drb/drb.rb =================================================================== --- ruby_1_8/lib/drb/drb.rb (revision 13908) +++ ruby_1_8/lib/drb/drb.rb (revision 13909) @@ -578,7 +578,7 @@ end raise(DRbConnError, 'connection closed') if str.nil? raise(DRbConnError, 'premature marshal format(can\'t read)') if str.size < sz - Thread.exclusive do + DRb.mutex.synchronize do begin save = Thread.current[:drb_untaint] Thread.current[:drb_untaint] = [] @@ -1751,10 +1751,16 @@ end module_function :install_acl + @mutex = Mutex.new + def mutex + @mutex + end + module_function :mutex + @server = {} def regist_server(server) @server[server.uri] = server - Thread.exclusive do + mutex.synchronize do @primary_server = server unless @primary_server end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml