summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas "Pixel" Noble <pixel@nobis-crew.org>2013-08-07 17:58:20 +0200
committerNicolas "Pixel" Noble <pixel@nobis-crew.org>2013-08-07 17:58:20 +0200
commit4ac6cc16fd54c12161b131e3b9bab0ac17dc4d01 (patch)
treef6ff890da75a405bfee1d1a9ed9867d6ec4a9900
parent24dbb15bf6f2b513e2fb75345345b7b646ff1a81 (diff)
The close operation is actually async too. Meaning that the destroy operation probably should become async...
-rw-r--r--src/BLua.cc7
-rw-r--r--src/LuaHandle.cc2
2 files changed, 4 insertions, 5 deletions
diff --git a/src/BLua.cc b/src/BLua.cc
index e8c5ab6..73995c0 100644
--- a/src/BLua.cc
+++ b/src/BLua.cc
@@ -270,8 +270,7 @@ int Balau::LuaStatics::callwrap(lua_State * __L, lua_CFunction func) {
int Balau::LuaStatics::collector(lua_State * __L) {
Lua L(__L);
LuaObjectBase * o = (LuaObjectBase *) L.touserdata();
- o->destroy();
- return 0;
+ return L.yield(Future<int>([o]() { o->destroy(); return 0; }));
}
int Balau::LuaStatics::destructor(lua_State * __L) {
@@ -279,12 +278,12 @@ int Balau::LuaStatics::destructor(lua_State * __L) {
L.push("__obj");
L.copy();
L.gettable(-3, true);
- collector(__L);
+ LuaObjectBase * o = (LuaObjectBase *) L.touserdata();
L.pop();
L.push();
L.settable(-3, true);
L.pop();
- return 0;
+ return L.yield(Future<int>([o]() { o->destroy(); return 0; }));
}
void Balau::Lua::setCallWrap(lua_CallWrapper wrapper) {
diff --git a/src/LuaHandle.cc b/src/LuaHandle.cc
index 7607665..a1dd93d 100644
--- a/src/LuaHandle.cc
+++ b/src/LuaHandle.cc
@@ -22,7 +22,7 @@ int sLua_IOHandle::IOHandle_proceed(Balau::Lua & L, int n, Balau::IOHandle * obj
switch (caller) {
case IOHANDLE_CLOSE:
- h->close();
+ return L.yield(Balau::Future<int>([h]() mutable { h->close(); return 0; }));
break;
}