moonbridge

diff moonbridge_io.c @ 280:1a4f89f4c712

Modified behavior of moonbridge_io.signalsocket(...); Fixed usage of moonbridge_io.signalsocket(...) in moonbridge_http module
author jbe
date Tue Jun 06 21:58:26 2017 +0200 (2017-06-06)
parents d4c82c90d244
children 6bb191b6ead5
line diff
     1.1 --- a/moonbridge_io.c	Tue Jun 06 20:19:09 2017 +0200
     1.2 +++ b/moonbridge_io.c	Tue Jun 06 21:58:26 2017 +0200
     1.3 @@ -66,6 +66,7 @@
     1.4  #define MOONBR_IO_CHILD_MT_REGKEY "moonbridge_io_child"
     1.5  #define MOONBR_IO_CHILD_PT_REGKEY "moonbridge_io_child_pt"
     1.6  #define MOONBR_IO_SIGNALS_REGKEY "moonbridge_io_signals"
     1.7 +#define MOONBR_IO_SIGNALSOCKETS_REGKEY "moonbridge_io_signalsockets"
     1.8  
     1.9  #ifdef MOONBR_IO_USE_TLS
    1.10  
    1.11 @@ -1641,13 +1642,20 @@
    1.12      if (socketpair(PF_LOCAL, SOCK_STREAM | SOCK_CLOEXEC, 0, moonbr_io_signalfds+2*sig)) {
    1.13        luaL_error(L, "Could not create socket pair for signal queueing");
    1.14      }
    1.15 -    errno = 0;
    1.16 -    signal(sig, moonbr_io_signalhandler);
    1.17 -    if (errno) luaL_error(L, "Could not install signal handler (invalid signal number %i?)", sig);
    1.18    }
    1.19 -  fd = dup(moonbr_io_signalfd_read(sig));
    1.20 +  errno = 0;
    1.21 +  signal(sig, moonbr_io_signalhandler);
    1.22 +  if (errno) luaL_error(L, "Could not install signal handler (invalid signal number %i?)", sig);
    1.23 +  lua_getfield(L, LUA_REGISTRYINDEX, MOONBR_IO_SIGNALSOCKETS_REGKEY);
    1.24 +  lua_pushinteger(L, sig);
    1.25 +  lua_gettable(L, -2);
    1.26 +  if (!lua_isnil(L, -1)) return 1;
    1.27 +  fd = dup(moonbr_io_signalfd_read(sig));  /* avoid close on Lua error */
    1.28    if (fd < 0) luaL_error(L, "Could not create duplicated file descriptor for signal socket");
    1.29    moonbr_io_pushhandle(L, fd);
    1.30 +  lua_pushinteger(L, sig);
    1.31 +  lua_pushvalue(L, -2);
    1.32 +  lua_settable(L, -5);  /* store reference to signal socket in cache table */
    1.33    return 1;
    1.34  }
    1.35  
    1.36 @@ -2110,6 +2118,9 @@
    1.37    lua_pushvalue(L, -1);
    1.38    lua_setfield(L, -3, "signals");
    1.39    lua_setfield(L, LUA_REGISTRYINDEX, MOONBR_IO_SIGNALS_REGKEY);
    1.40 +
    1.41 +  lua_newtable(L);  // signal sockets
    1.42 +  lua_setfield(L, LUA_REGISTRYINDEX, MOONBR_IO_SIGNALSOCKETS_REGKEY);
    1.43    
    1.44    luaL_setfuncs(L, moonbr_io_module_funcs, 0);
    1.45    return 1;

Impressum / About Us