зеркало из https://github.com/github/ruby.git
Fix thread leak in drb
This commit is contained in:
Родитель
00bbdf4451
Коммит
a0bc0e1ba1
|
@ -1213,6 +1213,10 @@ module DRb
|
||||||
@thread.alive?
|
@thread.alive?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def kill
|
||||||
|
@thread.kill
|
||||||
|
end
|
||||||
|
|
||||||
def method_missing(msg, *arg, &blk)
|
def method_missing(msg, *arg, &blk)
|
||||||
synchronize do
|
synchronize do
|
||||||
@wait_ev.wait_until { @status == :wait }
|
@wait_ev.wait_until { @status == :wait }
|
||||||
|
@ -1281,11 +1285,15 @@ module DRb
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@pool_proxy = make_pool
|
|
||||||
|
def self.stop_pool
|
||||||
|
@pool_proxy&.kill
|
||||||
|
@pool_proxy = nil
|
||||||
|
end
|
||||||
|
|
||||||
def self.open(remote_uri) # :nodoc:
|
def self.open(remote_uri) # :nodoc:
|
||||||
begin
|
begin
|
||||||
@pool_proxy = make_pool unless @pool_proxy.alive?
|
@pool_proxy = make_pool unless @pool_proxy&.alive?
|
||||||
|
|
||||||
conn = @pool_proxy.take(remote_uri)
|
conn = @pool_proxy.take(remote_uri)
|
||||||
conn = self.new(remote_uri) unless conn
|
conn = self.new(remote_uri) unless conn
|
||||||
|
|
|
@ -116,6 +116,7 @@ module DRbBase
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
@drb_service.finish
|
@drb_service.finish
|
||||||
|
DRb::DRbConn.stop_pool
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче