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