7084842c1c
- Fix (hopefully) various crashes in FlushAllOutput() (rhbz#1382444) - Fix Xwayland crashing in glamor on non glamor capable hw (rhbz#1390018)
55 lines
1.6 KiB
Diff
55 lines
1.6 KiB
Diff
From 4cfee398726adf89db4b632ade7d6cab8b78282e Mon Sep 17 00:00:00 2001
|
|
From: Ian Ray <ian.ray@ge.com>
|
|
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 <ajax@redhat.com>
|
|
Signed-off-by: Ian Ray <ian.ray@ge.com>
|
|
Acked-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
|
|
Acked-by: Daniel Stone <daniels@collabora.com>
|
|
---
|
|
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 <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);
|
|
--
|
|
2.9.3
|
|
|