when a process fails, it is also marked as dead
cleanup read_loop
log when a process fails
simplify read_loop
rename set_busy_and_failed to synchronize!