This was caused because add_to_timer_queue() did not set active_clock when inserting a timer before the end, making disarm() a no-op. Therefore, the clock would continue to use the timer after it had been freed.
This was caused because add_to_timer_queue() did not set active_clock when inserting a timer before the end, making disarm() a no-op. Therefore, the clock would continue to use the timer after it had been freed.