# HG changeset patch # User jbe # Date 1428462718 -7200 # Node ID df1ab25c6513e3e9dade00251e99a862622e6fdc # Parent c9ffbdac1337d0648978c1760f6d56022a148327 Bugfix in C function moonbr_io_closehandle diff -r c9ffbdac1337 -r df1ab25c6513 moonbridge.c --- a/moonbridge.c Wed Apr 08 04:22:03 2015 +0200 +++ b/moonbridge.c Wed Apr 08 05:11:58 2015 +0200 @@ -897,7 +897,7 @@ fprintf(stderr, "Error in \"connect\" function: %s\n", lua_tostring(L, -1)); exit(1); } - if (fd) moonbr_io_closehandle(L, -2, -1); /* attemt clean close */ + if (fd) moonbr_io_closehandle(L, -2, 0); /* attemt clean close */ if (lua_type(L, -1) != LUA_TBOOLEAN || !lua_toboolean(L, -1)) break; #ifdef MOONBR_LUA_PANIC_BUG_WORKAROUND lua_settop(L, 2); diff -r c9ffbdac1337 -r df1ab25c6513 moonbridge_io.c --- a/moonbridge_io.c Wed Apr 08 04:22:03 2015 +0200 +++ b/moonbridge_io.c Wed Apr 08 05:11:58 2015 +0200 @@ -424,14 +424,13 @@ return 0; } -void moonbr_io_closehandle(lua_State *L, int idx, int timeout) { +void moonbr_io_closehandle(lua_State *L, int idx, int reset) { moonbr_io_handle_t *handle; handle = luaL_checkudata(L, idx, MOONBR_IO_HANDLE_MT_REGKEY); - if (handle->fd >= 0) { - lua_pushcfunction(L, moonbr_io_close); - lua_pushvalue(L, idx); - lua_pushinteger(L, timeout); - lua_call(L, 2, 0); + if (!handle->closed) { + lua_pushcfunction(L, reset ? moonbr_io_reset : moonbr_io_close); + lua_pushvalue(L, idx < 0 ? idx-1 : idx); + lua_call(L, 1, 0); } } diff -r c9ffbdac1337 -r df1ab25c6513 moonbridge_io.h --- a/moonbridge_io.h Wed Apr 08 04:22:03 2015 +0200 +++ b/moonbridge_io.h Wed Apr 08 05:11:58 2015 +0200 @@ -1,6 +1,6 @@ void moonbr_io_pushhandle(lua_State *L, int fd, int useshutdown); -void moonbr_io_closehandle(lua_State *L, int idx, int timeout); +void moonbr_io_closehandle(lua_State *L, int idx, int reset); int moonbr_io_tcpconnect(lua_State *L); int moonbr_io_tcpconnect_nb(lua_State *L); int luaopen_moonbridge_io(lua_State *L);