From 94ab7455abc213fc96760e29ab2e943ec682fb22 Mon Sep 17 00:00:00 2001 From: Daniel Drake Date: Tue, 12 May 2015 16:39:22 -0600 Subject: Allow system call restarts upon signal interruption The X server frequently deals with SIGIO and SIGALRM interruptions. If process execution is inside certain blocking system calls when these signals arrive, e.g. with the kernel blocked on a contended semaphore, the system calls will be interrupted. Some system calls are automatically restartable (the kernel re-executes them with the same parameters once the signal handler returns) but only if the signal handler allows it. Set SA_RESTART on the signal handlers to enable this convenient behaviour. Reviewed-by: Adam Jackson Signed-off-by: Daniel Drake --- os/utils.c | 1 + 1 file changed, 1 insertion(+) (limited to 'os/utils.c') diff --git a/os/utils.c b/os/utils.c index 868eb043a..9b6fb3081 100644 --- a/os/utils.c +++ b/os/utils.c @@ -1255,6 +1255,7 @@ SmartScheduleInit(void) memset((char *) &act, 0, sizeof(struct sigaction)); /* Set up the timer signal function */ + act.sa_flags = SA_RESTART; act.sa_handler = SmartScheduleTimer; sigemptyset(&act.sa_mask); sigaddset(&act.sa_mask, SIGALRM); -- cgit v1.2.3