Короче, ты был прав.
Напомню, несколько человек утверждали, что stdio воспроизводит порванные сигналами сисколлы, а у тебя оно вылетало. Я даже тест сюда постил.
Сегодня столкнулся с тем, что низкоуровневый read() сигналом не рвется!
Оказалось, недавно дефолтное поведение signal() было изменено с SVID'ного на BSD'шное! Вот выдержка из
http://www.gnu.org/software/libc/manual/html_mono/libc.html
"In the GNU C Library we use the BSD version by default. To use the SVID version you can either use the function sysv_signal (see below) or use the _XOPEN_SOURCE feature select macro"