From 7fec9e34a0fd405aaf54c2d4d797ac81f6b6aa5c Mon Sep 17 00:00:00 2001 From: Roman Tsisyk <roman@tsisyk.com> Date: Mon, 17 Feb 2014 17:05:55 +0400 Subject: [PATCH] Allow fiber:resume() and fiber:cancel() syntax in Lua bindings Closes #161 --- src/lua/init.cc | 2 ++ test/box/fiber.result | 23 +++++++++++++++++++++++ test/box/fiber.test | 7 +++++++ 3 files changed, 32 insertions(+) diff --git a/src/lua/init.cc b/src/lua/init.cc index 124bf36fc5..be29aa67d7 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 a5864c180b..094c0e0ac3 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 02b8b4b10c..fdbcd90d49 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)" -- GitLab