in the expire callback that they also hold when starting the timer. I dont know
how to protect them against a situation where they hold a lock in the expire
callback and also hold it when canceling the timer, but at least that is a less
common situation.