The root of the problem is that I wanted 2 worker threads to communicate asynchronously via "one-way" signals and expected this:
Time Action
-------- -----------------------------------
1 Thread 1: raises signal
2 Thread 1: set up and wait for reply signal with a timeout
Thread 2: catches signal
3 Thread 2: composes and raises reply signal
4 Thread 1: catches reply
But what happens is that Thread 2 replies before Thread 1 can set up the wait for the reply, so it times out, even though the reply was actually sent.
What is the best way to fix this problem?