Skip to content

Commit 0204e8e

Browse files
committed
Fix timer regression - ensure we properly clear out timers when we do reset()
1 parent d8f0aa4 commit 0204e8e

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

src/jstimer.c

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -672,12 +672,26 @@ bool jstStopPinTimerTask(Pin pin) {
672672
return utilTimerRemoveTask(utilTimerFindTask(jstPinTaskChecker, (void*)&pin));
673673
}
674674

675+
static void jstOnTaskFinished(int id) {
676+
if ((utilTimerTaskInfo[id].type&~UET_FINISHED) == UET_EXECUTE) { // if EXEC with a JS function, free the function
677+
JsVar *timerFns = jsvObjectGetChildIfExists(execInfo.hiddenRoot, JSI_TIMER_RUN_JS_NAME);
678+
if (timerFns) {
679+
jsvRemoveArrayItem(timerFns, id);
680+
jsvUnLock(timerFns);
681+
}
682+
}
683+
utilTimerTaskInfo[id].type = UET_NONE;
684+
}
675685

676686

677687
void jstReset() {
678688
jshUtilTimerDisable();
679689
utilTimerOn = false;
680690
utilTimerTasksTail = utilTimerTasksHead = 0;
691+
for (int i=0;i<UTILTIMERTASK_TASKS;i++) {
692+
if (utilTimerTaskInfo[i].type != UET_NONE)
693+
jstOnTaskFinished(i);
694+
}
681695
utilTimerOffset = 0;
682696
utilTimerPeriod = 0;
683697
utilTimerSetTime = jshGetSystemTime();
@@ -695,14 +709,8 @@ void jstOnCustomEvent(IOEventFlags eventFlags, uint8_t *data, int dataLen) {
695709
if ((customFlags&EVC_TYPE_MASK)==EVC_TIMER_FINISHED) {
696710
int id = customFlags >> EVC_DATA_SHIFT;
697711
if (utilTimerTaskInfo[id].type & UET_FINISHED) {
698-
if (utilTimerTaskInfo[id].type == (UET_FINISHED|UET_EXECUTE)) { // if EXEC with a JS function, free the function
699-
JsVar *timerFns = jsvObjectGetChildIfExists(execInfo.hiddenRoot, JSI_TIMER_RUN_JS_NAME);
700-
if (timerFns) {
701-
jsvRemoveArrayItem(timerFns, id);
702-
jsvUnLock(timerFns);
703-
}
704-
}
705-
utilTimerTaskInfo[id].type = UET_NONE;
712+
jstOnTaskFinished(id);
713+
706714
}
707715
}
708716
}

0 commit comments

Comments
 (0)