i think the race is here  daemons stop gets called right after finalizerwatchdogdaemon wakeup we finalize the object  but leave needtowork as true when we exit the running loop watchdog daemon begins sleeping  then also gets interrupted by daemons stop however  needtowork is still true which causes a false positive timeout maybe we should set needtowork to false before finalizerdaemon run exits 