1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

remove Thread.exclusive

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@13909 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
seki 2007-11-13 13:04:30 +00:00
parent 4e0ac23588
commit e46a7bd93a
3 changed files with 31 additions and 27 deletions

View file

@ -1,3 +1,9 @@
Tue Nov 13 22:02:23 2007 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
* lib/drb/drb.rb: remove Thread.exclusive.
* lib/drb/extservm.rb: ditto.
Tue Nov 13 16:33:07 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
* numeric.c (flodivmod): work around for inifinity.

View file

@ -578,7 +578,7 @@ module DRb
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 @@ module DRb
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

View file

@ -5,10 +5,12 @@
require 'drb/drb'
require 'thread'
require 'monitor'
module DRb
class ExtServManager
include DRbUndumped
include MonitorMixin
@@command = {}
@ -21,6 +23,8 @@ module DRb
end
def initialize
super()
@cond = new_cond
@servers = {}
@waiting = []
@queue = Queue.new
@ -30,34 +34,26 @@ module DRb
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 = []
end
ary.each do |th|
begin
th.run
rescue ThreadError
end
synchronize do
@servers[name] = ro
@cond.signal
end
self
end
def unregist(name)
Thread.exclusive do
synchronize do
@servers.delete(name)
end
end
@ -73,16 +69,12 @@ module DRb
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