From 9cf2a7e1e2d7181b0135eb6b9c1a4e6577924076 Mon Sep 17 00:00:00 2001
From: Roman Tsisyk <roman@tsisyk.com>
Date: Fri, 18 Jul 2014 14:43:42 +0400
Subject: [PATCH] Remove fiber:wakeup() from public API

---
 src/lua/bsdsocket.cc  | 16 ++++++++++++++++
 src/lua/bsdsocket.lua |  6 +++---
 src/lua/fiber.cc      |  9 ---------
 3 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/src/lua/bsdsocket.cc b/src/lua/bsdsocket.cc
index 04df4b59ae..016df83d64 100644
--- a/src/lua/bsdsocket.cc
+++ b/src/lua/bsdsocket.cc
@@ -832,6 +832,21 @@ lbox_bsdsocket_recvfrom(struct lua_State *L)
 	return 2;
 }
 
+/**
+ * A special method to abort fiber blocked by iowait() by fid.
+ * Used only by socket:close().
+ */
+static int
+lbox_bsdsocket_abort(struct lua_State *L)
+{
+	int fid = lua_tointeger(L, 1);
+	struct fiber *fiber = fiber_find(fid);
+	if (fiber == NULL || !(fiber->flags & FIBER_USER_MODE))
+		return 0;
+	fiber_wakeup(fiber);
+	return 0;
+}
+
 void
 tarantool_lua_bsdsocket_init(struct lua_State *L)
 {
@@ -841,6 +856,7 @@ tarantool_lua_bsdsocket_init(struct lua_State *L)
 		{ "name",		lbox_bsdsocket_soname		},
 		{ "peer",		lbox_bsdsocket_peername		},
 		{ "recvfrom",		lbox_bsdsocket_recvfrom		},
+		{ "abort",		lbox_bsdsocket_abort		},
 		{ NULL,			NULL				}
 	};
 
diff --git a/src/lua/bsdsocket.lua b/src/lua/bsdsocket.lua
index 06be8295d4..0c85b55f2c 100644
--- a/src/lua/bsdsocket.lua
+++ b/src/lua/bsdsocket.lua
@@ -187,7 +187,7 @@ local function wait_safely(self, what, timeout)
         self.waiters = {}
     end
 
-    self.waiters[fid] = f
+    self.waiters[fid] = true
     local res = internal.iowait(self.fh, what, timeout)
     self.waiters[fid] = nil
     return res
@@ -280,8 +280,8 @@ end
 
 socket_methods.close = function(self)
     if self.waiters ~= nil then
-        for fid, fiber in pairs(self.waiters) do
-            fiber:wakeup()
+        for fid in pairs(self.waiters) do
+            internal.abort(fid)
             self.waiters[fid] = nil
         end
     end
diff --git a/src/lua/fiber.cc b/src/lua/fiber.cc
index dd1036c68c..ba69d6ac00 100644
--- a/src/lua/fiber.cc
+++ b/src/lua/fiber.cc
@@ -255,14 +255,6 @@ lbox_fiber_info(struct lua_State *L)
 	return 1;
 }
 
-static int
-lbox_fiber_wakeup(struct lua_State *L)
-{
-	struct fiber *f = lbox_checkfiber(L, 1);
-	fiber_wakeup(f);
-	return 0;
-}
-
 static void
 box_lua_fiber_run_detached(va_list ap)
 {
@@ -461,7 +453,6 @@ lbox_fiber_time64(struct lua_State *L)
 static const struct luaL_reg lbox_fiber_meta [] = {
 	{"id", lbox_fiber_id},
 	{"name", lbox_fiber_name},
-	{"wakeup", lbox_fiber_wakeup},
 	{"cancel", lbox_fiber_cancel},
 	{"status", lbox_fiber_status},
 	{"testcancel", lbox_fiber_testcancel},
-- 
GitLab