rem: timerHandler = tmp->next; wfree(tmp);
add: tmp->permanent = False; if (!IS_ZERO(tmp->when)) { timerHandler = tmp->next; wfree(tmp); }
context: WMDeleteTimerWithClientData(void *cdata){    TimerHandler *handler, *tmp;    if (!cdata || !timerHandler)        return;    tmp = timerHandler;    if (tmp->clientData==cdata) {        timerHandler = tmp->next;        wfree(tmp);    } else {        while (tmp->next) {            if (tmp->next->clientData==cdata) {                handler = tmp->next;                tmp->next = handler->next;                wfree(handler);                break;            }            tmp = tmp->next;        }    }}