Signals should be blocked on the actual merge/unmerge as you can have serious undefined behaviour (some files may be merged, but others may be missing) or worse, you could do it on a critical system package such as python or portage or glibc or gcc and have a very broken system. IMO, this doesn't break ^C working because the user still has all the time src_* takes to stop the merge. Reproducible: Always
We should be able use the Scheduler's existing signal handling code to allow running merges to complete: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=c4451a1e94212025e060cfd8e6a2341527202086