As for me, I can't even see what it does,
Suppose that the task has the pending SIG which is "blocked" by DRM.
dequeue_signal() calls ->notifier(), it nacks the signal, we clear
TIF_SIGPENDING. Then dequeue_signal() does recalc_sigpending() and
sets TIF_SIGPENDING again. We return 0 to get_signal_to_deliver(),
and then return to user-space with TIF_SIGPENDING. Endless loop ?
Even if it works somehow... "blocking" SIG means that in fact we
"block" SIG+1, SIG+2, etc if SIG is pending.
and of course this can't work for multithread programs, another
thread can dequeue SIGTSTP and initiate a group stop.
Oleg.
--