add logging to retry
change how start() works to detect when we give up

otherwise we can deadlock