add optional hit_count to timer_start()
make sure the handlers are not already there

and avoid endless loops
it should not happen, but it looks like it does happen in some rare
unreproducible cases