# HG changeset patch # User jbe # Date 1425764321 -3600 # Node ID 5e73b75bd2dc30401d8da3d7c56d0229a114cfea # Parent 7b3707ba603e7000280e4c0d14332646a7fe4133 Bugfix regarding temporary timeout settings and initialization of variable 'newval' in moonbr_timeout(L) diff -r 7b3707ba603e -r 5e73b75bd2dc moonbridge.c --- a/moonbridge.c Sat Mar 07 19:17:37 2015 +0100 +++ b/moonbridge.c Sat Mar 07 22:38:41 2015 +0100 @@ -2279,6 +2279,8 @@ getitimer(ITIMER_REAL, &oldval); } else { struct itimerval newval = {}; + timerclear(&newval.it_interval); + timerclear(&newval.it_value); if (lua_toboolean(L, 1)) { luaL_argcheck( L, moonbr_lua_totimeval(L, 1, &newval.it_value), 1, @@ -2292,7 +2294,18 @@ } } else { getitimer(ITIMER_REAL, &oldval); - if (timercmp(&newval.it_value, &oldval.it_value, <)) { + if (!timerisset(&oldval.it_value)) { + if (setitimer(ITIMER_REAL, &newval, NULL)) { + moonbr_log(LOG_CRIT, "Could not set ITIMER_REAL via setitimer()"); + moonbr_terminate_error(); + } + lua_call(L, lua_gettop(L) - 2, LUA_MULTRET); + timerclear(&newval.it_value); + if (setitimer(ITIMER_REAL, &newval, NULL)) { + moonbr_log(LOG_CRIT, "Could not set ITIMER_REAL via setitimer()"); + moonbr_terminate_error(); + } + } else if (timercmp(&newval.it_value, &oldval.it_value, <)) { struct itimerval remval; if (setitimer(ITIMER_REAL, &newval, NULL)) { moonbr_log(LOG_CRIT, "Could not set ITIMER_REAL via setitimer()");