Skip to content

Commit 059fd5c

Browse files
authored
new_register_name() (cloudwu#1949)
1 parent 64a0ed4 commit 059fd5c

File tree

1 file changed

+23
-16
lines changed

1 file changed

+23
-16
lines changed

service/clusteragent.lua

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,36 +9,43 @@ gate = tonumber(gate)
99
fd = tonumber(fd)
1010

1111
local large_request = {}
12+
local inquery_name = {}
13+
local register_name
1214

1315
local register_name_mt = { __index =
1416
function(self, name)
15-
local waitco = self.__inquery_name[name]
17+
local waitco = inquery_name[name]
1618
if waitco then
17-
local co=coroutine.running()
19+
local co = coroutine.running()
1820
table.insert(waitco, co)
1921
skynet.wait(co)
20-
return rawget(self, name)
22+
return rawget(register_name, name)
2123
else
2224
waitco = {}
23-
self.__inquery_name[name] = waitco
24-
local addr = skynet.call(clusterd, "lua", "queryname", name:sub(2)) -- name must be '@xxxx'
25-
if addr then
26-
self[name] = addr
27-
end
28-
self.__inquery_name[name] = nil
29-
for _, co in ipairs(waitco) do
30-
skynet.wakeup(co)
25+
inquery_name[name] = waitco
26+
27+
while true do
28+
local ctx = register_name
29+
local addr = skynet.call(clusterd, "lua", "queryname", name:sub(2)) -- name must be '@xxxx'
30+
if addr then
31+
ctx[name] = addr
32+
end
33+
if ctx == register_name then
34+
inquery_name[name] = nil
35+
for _, co in ipairs(waitco) do
36+
skynet.wakeup(co)
37+
end
38+
return addr
39+
end
3140
end
32-
return addr
3341
end
3442
end
3543
}
3644

3745
local function new_register_name()
38-
return setmetatable({ __inquery_name = {} }, register_name_mt)
46+
register_name = setmetatable({}, register_name_mt)
3947
end
40-
41-
local register_name = new_register_name()
48+
new_register_name()
4249

4350
local tracetag
4451

@@ -136,7 +143,7 @@ skynet.start(function()
136143
socket.close_fd(fd)
137144
skynet.exit()
138145
elseif cmd == "namechange" then
139-
register_name = new_register_name()
146+
new_register_name()
140147
else
141148
skynet.error(string.format("Invalid command %s from %s", cmd, skynet.address(source)))
142149
end

0 commit comments

Comments
 (0)