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()");