Merge pull request #413 from dnc40085/dev096-tmr.alarm_memory_leak_fix
Fix for issue #382
This commit is contained in:
commit
d30fea9bd0
|
@ -11,11 +11,18 @@
|
|||
|
||||
static os_timer_t alarm_timer[NUM_TMR];
|
||||
static int alarm_timer_cb_ref[NUM_TMR] = {LUA_NOREF,LUA_NOREF,LUA_NOREF,LUA_NOREF,LUA_NOREF,LUA_NOREF,LUA_NOREF};
|
||||
static bool alarm_timer_repeat[NUM_TMR]= {0,0,0,0,0,0,0};
|
||||
|
||||
void alarm_timer_common(lua_State* L, unsigned id){
|
||||
if(alarm_timer_cb_ref[id] == LUA_NOREF)
|
||||
return;
|
||||
lua_rawgeti(L, LUA_REGISTRYINDEX, alarm_timer_cb_ref[id]);
|
||||
if(alarm_timer_repeat[id]==0)
|
||||
{
|
||||
if(alarm_timer_cb_ref[id] != LUA_NOREF)
|
||||
luaL_unref(L, LUA_REGISTRYINDEX, alarm_timer_cb_ref[id]);
|
||||
|
||||
}
|
||||
lua_call(L, 0, 0);
|
||||
}
|
||||
|
||||
|
@ -118,6 +125,7 @@ static int tmr_alarm( lua_State* L )
|
|||
stack++;
|
||||
if ( repeat != 1 && repeat != 0 )
|
||||
return luaL_error( L, "wrong arg type" );
|
||||
alarm_timer_repeat[id]=repeat;
|
||||
}
|
||||
|
||||
// luaL_checkanyfunction(L, stack);
|
||||
|
@ -141,6 +149,9 @@ static int tmr_stop( lua_State* L )
|
|||
MOD_CHECK_ID( tmr, id );
|
||||
|
||||
os_timer_disarm(&(alarm_timer[id]));
|
||||
if(alarm_timer_cb_ref[id] != LUA_NOREF)
|
||||
luaL_unref(L, LUA_REGISTRYINDEX, alarm_timer_cb_ref[id]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue