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:
parent
4e0ac23588
commit
e46a7bd93a
3 changed files with 31 additions and 27 deletions
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue