DerMixD hasn't got much business with signals, but every UNIX program needs to handle some signals, like SIGINT.

My apporach is this:
1. Block all signals in all threads.
2. Have one thread on sigwait() to fetch them.
3. That thread can communicate to the mixer, if needed.

The beauty of sigwait() is that it avoids any asynchronous signal handlers, messing up what is already messed up by concurrent threads.

I really hope I understood this correctly. I half-way went for the self-pipe trick and a set of two threads for that... before realizing that sigwait() should do it with less clutter.

One modification: I do not want to destroy the behavior of abnormal signals like segmentation fauls -- I hate it when custom signal handlers prevent me from debugging the original piece of code. So, I only block the signals that are of interest for custom handling.

Still, there is a little twist with stuff like SIGINT: I want to gracefully handle it, but still indicate to the shell that the process terminated because of the signal. Self-killing after cleanup achieves that.
