moonbridge

changeset 39:5e73b75bd2dc

Bugfix regarding temporary timeout settings and initialization of variable 'newval' in moonbr_timeout(L)
author jbe
date Sat Mar 07 22:38:41 2015 +0100 (2015-03-07)
parents 7b3707ba603e
children 46e45cd8548e
files moonbridge.c
line diff
     1.1 --- a/moonbridge.c	Sat Mar 07 19:17:37 2015 +0100
     1.2 +++ b/moonbridge.c	Sat Mar 07 22:38:41 2015 +0100
     1.3 @@ -2279,6 +2279,8 @@
     1.4      getitimer(ITIMER_REAL, &oldval);
     1.5    } else {
     1.6      struct itimerval newval = {};
     1.7 +    timerclear(&newval.it_interval);
     1.8 +    timerclear(&newval.it_value);
     1.9      if (lua_toboolean(L, 1)) {
    1.10        luaL_argcheck(
    1.11          L, moonbr_lua_totimeval(L, 1, &newval.it_value), 1,
    1.12 @@ -2292,7 +2294,18 @@
    1.13        }
    1.14      } else {
    1.15        getitimer(ITIMER_REAL, &oldval);
    1.16 -      if (timercmp(&newval.it_value, &oldval.it_value, <)) {
    1.17 +      if (!timerisset(&oldval.it_value)) {
    1.18 +        if (setitimer(ITIMER_REAL, &newval, NULL)) {
    1.19 +          moonbr_log(LOG_CRIT, "Could not set ITIMER_REAL via setitimer()");
    1.20 +          moonbr_terminate_error();
    1.21 +        }
    1.22 +        lua_call(L, lua_gettop(L) - 2, LUA_MULTRET);
    1.23 +        timerclear(&newval.it_value);
    1.24 +        if (setitimer(ITIMER_REAL, &newval, NULL)) {
    1.25 +          moonbr_log(LOG_CRIT, "Could not set ITIMER_REAL via setitimer()");
    1.26 +          moonbr_terminate_error();
    1.27 +        }
    1.28 +      } else if (timercmp(&newval.it_value, &oldval.it_value, <)) {
    1.29          struct itimerval remval;
    1.30          if (setitimer(ITIMER_REAL, &newval, NULL)) {
    1.31            moonbr_log(LOG_CRIT, "Could not set ITIMER_REAL via setitimer()");

Impressum / About Us