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