Skip to content
Snippets Groups Projects
Commit 6079e435 authored by Nick Zavaritsky's avatar Nick Zavaritsky
Browse files

Fix gh-1904: Issues in old net.box under scrunity

 * :close() didn't stop reconnect activity;
 * cancelling a fiber in the ceratin request stage leads to
   deadlock in subsequent :close().
parent 4cab8fc8
No related branches found
No related tags found
No related merge requests found
......@@ -598,7 +598,9 @@ local remote_methods = {
for _, fid in pairs(list) do
if fid ~= fiber.id() then
if self.ch.fid[fid] ~= nil then
self.ch.fid[fid]:put(true)
-- timeout=0 prevents deadlock if a client went away
-- without removing the channel
self.ch.fid[fid]:put(true, 0)
self.ch.fid[fid] = nil
end
end
......@@ -640,6 +642,9 @@ local remote_methods = {
return
end
fiber.sleep(self.opts.reconnect_after)
if self.state == 'closed' then
return
end
end
self:_switch_state('connecting')
......
......@@ -1016,6 +1016,23 @@ c.space.test:select{}
box.space.test:drop()
---
...
-- gh-1904 net.box hangs in :close() if a fiber was cancelled
-- while blocked in :_wait_state() in :_request()
options = {user = 'netbox', password = 'badpass', wait_connected = false, reconnect_after = 0.01}
---
...
c = net:new(box.cfg.listen, options)
---
...
f = fiber.create(function() c:call("") end)
---
...
fiber.sleep(0.1)
---
...
f:cancel(); c:close()
---
...
box.schema.user.revoke('guest', 'read,write,execute', 'universe')
---
...
......
......@@ -399,5 +399,13 @@ c.space.test:upsert({2, 4, 'nothing'}, {{'+', 3, 100500}}) -- wrong operation
c.space.test:select{}
box.space.test:drop()
-- gh-1904 net.box hangs in :close() if a fiber was cancelled
-- while blocked in :_wait_state() in :_request()
options = {user = 'netbox', password = 'badpass', wait_connected = false, reconnect_after = 0.01}
c = net:new(box.cfg.listen, options)
f = fiber.create(function() c:call("") end)
fiber.sleep(0.1)
f:cancel(); c:close()
box.schema.user.revoke('guest', 'read,write,execute', 'universe')
test_run:cmd("clear filter")
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment