From 4cfee398726adf89db4b632ade7d6cab8b78282e Mon Sep 17 00:00:00 2001 From: Ian Ray Date: Wed, 25 May 2016 10:41:53 +0300 Subject: [PATCH xserver v2 1/7] xwayland-shm: block signals during fallocate posix_fallocate() does an explicit rollback if it gets EINTR, and this is a problem on slow systems because when the allocation size is sufficiently large posix_fallocate() will always be interrupted by the smart scheduler's SIGALRM. Changes since v1 - big comment in the code to explain what is going on Reviewed-by: Adam Jackson Signed-off-by: Ian Ray Acked-by: Pekka Paalanen Acked-by: Daniel Stone --- hw/xwayland/xwayland-shm.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/hw/xwayland/xwayland-shm.c b/hw/xwayland/xwayland-shm.c index daf6148..452d1f5 100644 --- a/hw/xwayland/xwayland-shm.c +++ b/hw/xwayland/xwayland-shm.c @@ -28,6 +28,8 @@ #include #endif +#include "os.h" + #include "xwayland.h" #include @@ -139,9 +141,17 @@ os_create_anonymous_file(off_t size) return -1; #ifdef HAVE_POSIX_FALLOCATE + /* + * posix_fallocate does an explicit rollback if it gets EINTR. + * Temporarily block signals to allow the call to succeed on + * slow systems where the smart scheduler's SIGALRM prevents + * large allocation attempts from ever succeeding. + */ + OsBlockSignals(); do { ret = posix_fallocate(fd, 0, size); } while (ret == EINTR); + OsReleaseSignals(); if (ret != 0) { close(fd); -- 2.9.3