If a thread is running async-drain (like TCP does) its possible some other thread may attempt to restart
the timer. If that occurs the thread should be given a error return and the timer not started (just like
the synchronous drain).
Note that Gleb's previous patch to the callout system fixes 1/2 of the problem this rarer case is still possible and
needs to be addressed :-)