xserver: Branch 'master'

Adam Jackson ajax at kemper.freedesktop.org
Tue Nov 1 19:49:40 UTC 2016


 hw/xwayland/xwayland-shm.c |   10 ++++++++++
 1 file changed, 10 insertions(+)

New commits:
commit 4cfee398726adf89db4b632ade7d6cab8b78282e
Author: Ian Ray <ian.ray at ge.com>
Date:   Wed May 25 10:41:53 2016 +0300

    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 <ajax at redhat.com>
    Signed-off-by: Ian Ray <ian.ray at ge.com>
    Acked-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
    Acked-by: Daniel Stone <daniels at collabora.com>

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 <dix-config.h>
 #endif
 
+#include "os.h"
+
 #include "xwayland.h"
 
 #include <sys/mman.h>
@@ -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);


More information about the xorg-commit mailing list