diff --git a/src/lua/init.cc b/src/lua/init.cc index 124bf36fc5c96d5f5ae74c49dd4b69b8eb3c2942..be29aa67d7ea03f62fab6e17fc81afa2d782ddb0 100644 --- a/src/lua/init.cc +++ b/src/lua/init.cc @@ -918,6 +918,8 @@ lbox_fiber_testcancel(struct lua_State *L) static const struct luaL_reg lbox_fiber_meta [] = { {"id", lbox_fiber_id}, {"name", lbox_fiber_name}, + {"cancel", lbox_fiber_cancel}, + {"resume", lbox_fiber_resume}, {"__gc", lbox_fiber_gc}, {NULL, NULL} }; diff --git a/test/box/fiber.result b/test/box/fiber.result index a5864c180bb97fc339f2dd8c953603a2944739cc..094c0e0ac3e18439787970b61b9147c80255110b 100644 --- a/test/box/fiber.result +++ b/test/box/fiber.result @@ -307,3 +307,26 @@ lua #result --- - 300 ... +lua function testfun() while true do box.fiber.sleep(10) end end +--- +... +lua f = box.fiber.wrap(testfun) +--- +... +lua f:cancel() +--- +... +lua f:resume() +--- +error: 'fiber.resume(): the fiber is dead' +... +lua fib_id = box.fiber.wrap(testfun):id() +--- +... +lua box.fiber.find(fib_id):cancel() +--- +... +lua box.fiber.find(fib_id) +--- + - nil +... diff --git a/test/box/fiber.test b/test/box/fiber.test index 02b8b4b10cf625527a09a9ff94762a6f3da5b828..fdbcd90d4999096dad6c2d51d3a3e4ee2644ee8c 100644 --- a/test/box/fiber.test +++ b/test/box/fiber.test @@ -100,3 +100,10 @@ for i in xrange(1, 10): exec admin "lua while #result < 300 do box.fiber.sleep(0.01) end" exec admin "lua #result" +exec admin "lua function testfun() while true do box.fiber.sleep(10) end end" +exec admin "lua f = box.fiber.wrap(testfun)" +exec admin "lua f:cancel()" +exec admin "lua f:resume()" +exec admin "lua fib_id = box.fiber.wrap(testfun):id()" +exec admin "lua box.fiber.find(fib_id):cancel()" +exec admin "lua box.fiber.find(fib_id)"