Please pardon the interjection. I'm a hardware guy and any time a hardware process is in a state where it is waiting for a signal from another process, I put in a timeout mechanism. Shouldn't this be a normal practice for software as well?