On a slow system that is configured with SMART_SCHEDULE_POSSIBLE, large posix_fallocate() requests may be interrupted by the SmartScheduleTimer (SIGALRM) continuously. Fallback to ftruncate if posix_fallocate fails.
Signed-off-by: Ian Ray <[email protected]> --- hw/xwayland/xwayland-shm.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/hw/xwayland/xwayland-shm.c b/hw/xwayland/xwayland-shm.c index e8545b3..342b723 100644 --- a/hw/xwayland/xwayland-shm.c +++ b/hw/xwayland/xwayland-shm.c @@ -142,9 +142,12 @@ os_create_anonymous_file(off_t size) #ifdef HAVE_POSIX_FALLOCATE ret = posix_fallocate(fd, 0, size); if (ret != 0) { - close(fd); - errno = ret; - return -1; + /* Fallback to ftruncate in case of failure. */ + ret = ftruncate(fd, size); + if (ret < 0) { + close(fd); + return -1; + } } #else ret = ftruncate(fd, size); -- 2.4.5 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel
