X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=ghc%2Frts%2Fposix%2FItimer.c;h=83ed84d6ef02787d171a0131e0a7fff50d2b366f;hp=06d0e6c82a6954ca1d6744704ec6fc6ceb66ba39;hb=1494f895d69a33df2f8d855f73943faec5c6858e;hpb=d7d596d039b48dec6b71df9c4bca0d12958ecdb9 diff --git a/ghc/rts/posix/Itimer.c b/ghc/rts/posix/Itimer.c index 06d0e6c..83ed84d 100644 --- a/ghc/rts/posix/Itimer.c +++ b/ghc/rts/posix/Itimer.c @@ -84,7 +84,18 @@ install_vtalrm_handler(TickProc handle_tick) action.sa_handler = handle_tick; sigemptyset(&action.sa_mask); + +#ifdef SA_RESTART + // specify SA_RESTART. One consequence if we don't do this is + // that readline gets confused by the -threaded RTS. It seems + // that if a SIGALRM handler is installed without SA_RESTART, + // readline installs its own SIGALRM signal handler (see + // readline's signals.c), and this somehow causes readline to go + // wrong when the input exceeds a single line (try it). + action.sa_flags = SA_RESTART; +#else action.sa_flags = 0; +#endif return sigaction(ITIMER_SIGNAL, &action, NULL); }