process-directed signals incorrectly delivered to threads blocking them
DR by default intercepts all signals and keeps them all unblocked in all threads. It then emulates the kernel upon receipt of a signal, deciding whether to deliver it or queue it as a pending signal, based on the receiving thread's mask. However, for process-directed signals, delivery is supposed to only consider those threads that have the signal unblocked. Since DR will not deliver a signal to a different thread from the one that received it, DR fails to properly emulate the kernel.
To handle all scenarios, including clients using alarm signals, we can't rely on installing the app's mask and must emulate the kernel. We'll have to examine other threads and deliver the signal to one of them. This may not be simple to do efficiently yet race-free.