This should fix the deadlock for good.  We don't allow spinning while we hold the lock.  And we also set an absolute time limit, instead of letting the delay update