hunting that problem I realized why emacs (& other programs) don't act immediately on asynchronous events: they just set a global variable, and do the work synchronously at preprogrammed time. It's better (and necessary) to check the global variables in cycle (even though so many times apparently in vain), then .... act asynchrnously, with the need to lock all necessary to both the signal handler, and to the main flow.
accepted! (debian had a bugreport on this too)
ls(1) should listen on SIGWINCH: i often list my ~, and widen the terminal window before the output begins. Also ls -R now works better.
http://maruska.dyndns.org/comp/gentoo/portage/sys-apps/coreutils/files/winch.patch
note: Another thing i dislike about (gnu) core tools, is cp(1): on "disk full" it does not remove the destination file. I solve it at a higher level.