xserver: Branch 'master' - 2 commits

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Sep 19 21:37:51 UTC 2018


 Xext/shm.c              |   56 ++++++++++++++++++++++++++++--------------------
 configure.ac            |   43 ------------------------------------
 include/dix-config.h.in |    3 --
 include/meson.build     |    5 ----
 4 files changed, 33 insertions(+), 74 deletions(-)

New commits:
commit 19f6cb570becbc4e355807199c6e251fc7935132
Author: Eric Anholt <eric at anholt.net>
Date:   Wed Sep 19 13:28:06 2018 -0700

    shm: Pick the shm dir at run time, not build time.
    
    Prodding the builder's filesystem for tmp dirs doesn't necessarily
    tell you anything about what the actual host's filesystem is going to
    look like, so we should just try the dirs at runtime.
    
    Signed-off-by: Eric Anholt <eric at anholt.net>

diff --git a/Xext/shm.c b/Xext/shm.c
index ed43b9202..2739a59e7 100644
--- a/Xext/shm.c
+++ b/Xext/shm.c
@@ -1194,36 +1194,46 @@ ProcShmAttachFd(ClientPtr client)
 static int
 shm_tmpfile(void)
 {
-#ifdef SHMDIR
+    const char *shmdirs[] = {
+        "/run/shm",
+        "/var/tmp",
+        "/tmp",
+    };
     int	fd;
-    char	template[] = SHMDIR "/shmfd-XXXXXX";
+
 #ifdef O_TMPFILE
-    fd = open(SHMDIR, O_TMPFILE|O_RDWR|O_CLOEXEC|O_EXCL, 0666);
-    if (fd >= 0) {
-        DebugF ("Using O_TMPFILE\n");
-        return fd;
+    for (int i = 0; i < ARRAY_SIZE(shmdirs); i++) {
+        fd = open(shmdirs[i], O_TMPFILE|O_RDWR|O_CLOEXEC|O_EXCL, 0666);
+        if (fd >= 0) {
+            DebugF ("Using O_TMPFILE\n");
+            return fd;
+        }
     }
     ErrorF ("Not using O_TMPFILE\n");
 #endif
+
+    for (int i = 0; i < ARRAY_SIZE(shmdirs); i++) {
+        char template[PATH_MAX];
+        snprintf(template, ARRAY_SIZE(template), "%s/shmfd-XXXXXX", shmdirs[i]);
 #ifdef HAVE_MKOSTEMP
-    fd = mkostemp(template, O_CLOEXEC);
+        fd = mkostemp(template, O_CLOEXEC);
 #else
-    fd = mkstemp(template);
+        fd = mkstemp(template);
 #endif
-    if (fd < 0)
-        return -1;
-    unlink(template);
+        if (fd < 0)
+            continue;
+        unlink(template);
 #ifndef HAVE_MKOSTEMP
-    int flags = fcntl(fd, F_GETFD);
-    if (flags != -1) {
-        flags |= FD_CLOEXEC;
-        (void) fcntl(fd, F_SETFD, &flags);
-    }
+        int flags = fcntl(fd, F_GETFD);
+        if (flags != -1) {
+            flags |= FD_CLOEXEC;
+            (void) fcntl(fd, F_SETFD, &flags);
+        }
 #endif
-    return fd;
-#else
+        return fd;
+    }
+
     return -1;
-#endif
 }
 
 static int
diff --git a/configure.ac b/configure.ac
index 359b62cb5..57a233102 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1115,49 +1115,6 @@ case "$DRI2,$HAVE_DRI2PROTO" in
 esac
 AM_CONDITIONAL(DRI2, test "x$DRI2" = xyes)
 
-dnl
-dnl Locate a suitable tmp file system for creating shared memeory files
-dnl
-
-AC_ARG_WITH(shared-memory-dir, AS_HELP_STRING([--with-shared-memory-dir=PATH], [Path to directory in a world-writable temporary directory for anonymous shared memory (default: auto)]),
-[],
-[with_shared_memory_dir=yes])
-
-shmdirs="/run/shm /var/tmp /tmp"
-
-case x"$with_shared_memory_dir" in
-xyes)
-	for dir in $shmdirs; do
-		case x"$with_shared_memory_dir" in
-		xyes)
-			echo Checking temp dir "$dir"
-			if test -d "$dir"; then
-				with_shared_memory_dir="$dir"
-			fi
-			;;
-		esac
-	done
-	;;
-x/*)
-	;;
-xno)
-	;;
-*)
-	AC_MSG_ERROR([Invalid directory specified for --with-shared-memory-dir: $with_shared_memory_dir])
-	;;
-esac
-
-case x"$with_shared_memory_dir" in
-xyes)
-	AC_MSG_ERROR([No directory found for shared memory temp files.])
-	;;
-xno)
-	;;
-*)
-	AC_DEFINE_UNQUOTED(SHMDIR, ["$with_shared_memory_dir"], [Directory for shared memory temp files])
-	;;
-esac
-
 AC_ARG_ENABLE(xtrans-send-fds,	AS_HELP_STRING([--disable-xtrans-send-fds], [Use Xtrans support for fd passing (default: auto)]), [XTRANS_SEND_FDS=$enableval], [XTRANS_SEND_FDS=auto])
 
 case "x$XTRANS_SEND_FDS" in
diff --git a/include/dix-config.h.in b/include/dix-config.h.in
index f8df86608..3bd22b8bb 100644
--- a/include/dix-config.h.in
+++ b/include/dix-config.h.in
@@ -452,9 +452,6 @@
 /* Wrap SIGBUS to catch MIT-SHM faults */
 #undef BUSFAULT
 
-/* Directory for shared memory temp files */
-#undef SHMDIR
-
 /* Don't let Xdefs.h define 'pointer' */
 #define _XTYPEDEF_POINTER       1
 
diff --git a/include/meson.build b/include/meson.build
index 4a0c12f5a..04c41e999 100644
--- a/include/meson.build
+++ b/include/meson.build
@@ -91,11 +91,6 @@ conf_data.set('SYSTEMD_LOGIND', build_systemd_logind)
 conf_data.set('NEED_DBUS', build_systemd_logind or build_hal)
 conf_data.set('CONFIG_WSCONS', host_machine.system() == 'openbsd')
 
-# XXX: SHMDIR is weird in autoconf, probing the build system for
-# various tmp directories.  Could we replace it with C code at runtime
-# that just uses whatever directory works?
-conf_data.set_quoted('SHMDIR', '/tmp')
-
 conf_data.set('HAVE_XSHMFENCE', xshmfence_dep.found())
 conf_data.set('WITH_LIBDRM', libdrm_dep.found())
 conf_data.set('GLAMOR_HAS_EGL_QUERY_DMABUF',
commit 804a9b4f57107fa2d0ed1ae0becda5bebaffe6e1
Author: Eric Anholt <eric at anholt.net>
Date:   Wed Sep 19 13:20:12 2018 -0700

    shm: reindent shm_tmpfile to follow our standards.
    
    Signed-off-by: Eric Anholt <eric at anholt.net>

diff --git a/Xext/shm.c b/Xext/shm.c
index 589ed0b4d..ed43b9202 100644
--- a/Xext/shm.c
+++ b/Xext/shm.c
@@ -1195,34 +1195,34 @@ static int
 shm_tmpfile(void)
 {
 #ifdef SHMDIR
-	int	fd;
-	char	template[] = SHMDIR "/shmfd-XXXXXX";
+    int	fd;
+    char	template[] = SHMDIR "/shmfd-XXXXXX";
 #ifdef O_TMPFILE
-	fd = open(SHMDIR, O_TMPFILE|O_RDWR|O_CLOEXEC|O_EXCL, 0666);
-	if (fd >= 0) {
-		DebugF ("Using O_TMPFILE\n");
-		return fd;
-	}
-	ErrorF ("Not using O_TMPFILE\n");
+    fd = open(SHMDIR, O_TMPFILE|O_RDWR|O_CLOEXEC|O_EXCL, 0666);
+    if (fd >= 0) {
+        DebugF ("Using O_TMPFILE\n");
+        return fd;
+    }
+    ErrorF ("Not using O_TMPFILE\n");
 #endif
 #ifdef HAVE_MKOSTEMP
-	fd = mkostemp(template, O_CLOEXEC);
+    fd = mkostemp(template, O_CLOEXEC);
 #else
-	fd = mkstemp(template);
+    fd = mkstemp(template);
 #endif
-	if (fd < 0)
-		return -1;
-	unlink(template);
+    if (fd < 0)
+        return -1;
+    unlink(template);
 #ifndef HAVE_MKOSTEMP
-	int flags = fcntl(fd, F_GETFD);
-	if (flags != -1) {
-		flags |= FD_CLOEXEC;
-		(void) fcntl(fd, F_SETFD, &flags);
-	}
+    int flags = fcntl(fd, F_GETFD);
+    if (flags != -1) {
+        flags |= FD_CLOEXEC;
+        (void) fcntl(fd, F_SETFD, &flags);
+    }
 #endif
-	return fd;
+    return fd;
 #else
-        return -1;
+    return -1;
 #endif
 }
 


More information about the xorg-commit mailing list