The basic idea of the fix is to poll the socket for FIN in testcancel. Since polling for FIN can be expensive, an alternative is to not remove the socket from libev poll list, and alter the session state when FIN is received, and, in testcancel(), check the state of the session.
-- You received this bug notification because you are a member of Tarantool Development Team, which is subscribed to tarantool. https://bugs.launchpad.net/bugs/1220676 Title: Abort lua fiber when owner socket closed Status in Tarantool - an efficient in-memory data store: New Bug description: Example function: function box.fqueue.take(timeout) timeout = tonumber(timeout) local now = box.time() while true do local x,one_ready = box.space[sno].index[i_ready]:next_equal( 'R' ) if one_ready == nil then if not timeout or box.time() - now >= timeout then return else box.fiber.sleep( timeout/100 ); end else return one_ready; end end end If socket, that called that function closed, function continue to work. To manage notifications about this bug go to: https://bugs.launchpad.net/tarantool/+bug/1220676/+subscriptions _______________________________________________ Mailing list: https://launchpad.net/~tarantool-developers Post to : [email protected] Unsubscribe : https://launchpad.net/~tarantool-developers More help : https://help.launchpad.net/ListHelp

