commit xorg-x11-server for openSUSE:Factory
Hello community, here is the log from the commit of package xorg-x11-server for openSUSE:Factory checked in at 2019-12-02 11:28:17 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xorg-x11-server (Old) and /work/SRC/openSUSE:Factory/.xorg-x11-server.new.4691 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "xorg-x11-server" Mon Dec 2 11:28:17 2019 rev:375 rq:750543 version:1.20.6+0 Changes: -------- --- /work/SRC/openSUSE:Factory/xorg-x11-server/xorg-x11-server.changes 2019-10-25 18:38:30.503691951 +0200 +++ /work/SRC/openSUSE:Factory/.xorg-x11-server.new.4691/xorg-x11-server.changes 2019-12-02 11:30:15.562590165 +0100 @@ -1,0 +2,16 @@ +Sat Nov 23 13:21:01 UTC 2019 - bjorn.lie@gmail.com + +- Update to version 1.20.6+0: + * xfree86: Test presence of isastream() + * present/wnmd: Relax assertion on CRTC on abort_vblank() + * os: Don't crash in AttendClient if the client is gone + * dix: Call SourceValidate before GetImage + * mi: Add a default no-op miSourceValidate + * compiler.h: Do not include sys/io.h on ARM with glibc + * xfree86: Call ScreenInit for protocol screens before GPU + screens + * modesetting: + - Implement ms_covering_randr_crtc() for ms_present_get_crtc() + - Fix ms_covering_crtc() segfault with non-xf86Crtc slave + +------------------------------------------------------------------- Old: ---- xserver-1.20.5+24.tar.xz New: ---- xserver-1.20.6+0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xorg-x11-server.spec ++++++ --- /var/tmp/diff_new_pack.xLGAx2/_old 2019-12-02 11:30:19.282588444 +0100 +++ /var/tmp/diff_new_pack.xLGAx2/_new 2019-12-02 11:30:19.286588442 +0100 @@ -1,7 +1,7 @@ # # spec file for package xorg-x11-server # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -46,9 +46,9 @@ %endif Name: xorg-x11-server -Version: 1.20.5+24 +Version: 1.20.6+0 Release: 0 -Url: http://xorg.freedesktop.org/ +URL: http://xorg.freedesktop.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build Summary: X ++++++ _service ++++++ --- /var/tmp/diff_new_pack.xLGAx2/_old 2019-12-02 11:30:19.390588394 +0100 +++ /var/tmp/diff_new_pack.xLGAx2/_new 2019-12-02 11:30:19.394588392 +0100 @@ -2,7 +2,7 @@ <service name="tar_scm" mode="disabled"> <param name="url">https://gitlab.freedesktop.org/xorg/xserver.git</param> <param name="scm">git</param> - <param name="revision">b6ee04e7</param> + <param name="revision">6b3fafa9</param> <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param> <param name="versionrewrite-pattern">xorgserver(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.xLGAx2/_old 2019-12-02 11:30:19.406588386 +0100 +++ /var/tmp/diff_new_pack.xLGAx2/_new 2019-12-02 11:30:19.410588384 +0100 @@ -1,4 +1,4 @@ <servicedata> <service name="tar_scm"> <param name="url">https://gitlab.freedesktop.org/xorg/xserver.git</param> - <param name="changesrevision">b6ee04e774af1fc2e2560583c95dfac688494c2a</param></service></servicedata> \ No newline at end of file + <param name="changesrevision">6b3fafa9bfa94b9b04a1a44dc52afb7c4bc250ce</param></service></servicedata> \ No newline at end of file ++++++ xserver-1.20.5+24.tar.xz -> xserver-1.20.6+0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/Xext/panoramiXprocs.c new/xserver-1.20.6+0/Xext/panoramiXprocs.c --- old/xserver-1.20.5+24/Xext/panoramiXprocs.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/Xext/panoramiXprocs.c 2019-11-22 23:56:38.000000000 +0100 @@ -1105,6 +1105,10 @@ DixGetAttrAccess); if (rc != Success) return rc; + drawables[j]->pScreen->SourceValidate(drawables[j], 0, 0, + drawables[j]->width, + drawables[j]->height, + IncludeInferiors); } pitch = PixmapBytePad(width, drawables[0]->depth); @@ -2007,6 +2011,12 @@ if (rc != Success) return rc; } + FOR_NSCREENS_FORWARD(i) { + drawables[i]->pScreen->SourceValidate(drawables[i], 0, 0, + drawables[i]->width, + drawables[i]->height, + IncludeInferiors); + } xgi = (xGetImageReply) { .type = X_Reply, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/Xext/shm.c new/xserver-1.20.6+0/Xext/shm.c --- old/xserver-1.20.5+24/Xext/shm.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/Xext/shm.c 2019-11-22 23:56:38.000000000 +0100 @@ -35,6 +35,9 @@ #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> +#ifdef HAVE_MEMFD_CREATE +#include <sys/mman.h> +#endif #include <unistd.h> #include <sys/stat.h> #include <fcntl.h> @@ -652,6 +655,9 @@ visual = wVisual(((WindowPtr) pDraw)); if (pDraw->type == DRAWABLE_WINDOW) pVisibleRegion = &((WindowPtr) pDraw)->borderClip; + pDraw->pScreen->SourceValidate(pDraw, stuff->x, stuff->y, + stuff->width, stuff->height, + IncludeInferiors); } else { if (stuff->x < 0 || @@ -860,6 +866,12 @@ return rc; } } + FOR_NSCREENS_FORWARD(i) { + drawables[i]->pScreen->SourceValidate(drawables[i], 0, 0, + drawables[i]->width, + drawables[i]->height, + IncludeInferiors); + } xgi = (xShmGetImageReply) { .type = X_Reply, @@ -1194,36 +1206,55 @@ static int shm_tmpfile(void) { -#ifdef SHMDIR - int fd; - char template[] = SHMDIR "/shmfd-XXXXXX"; + const char *shmdirs[] = { + "/run/shm", + "/var/tmp", + "/tmp", + }; + int fd; + +#ifdef HAVE_MEMFD_CREATE + fd = memfd_create("xorg", MFD_CLOEXEC|MFD_ALLOW_SEALING); + if (fd != -1) { + fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK); + DebugF ("Using memfd_create\n"); + return fd; + } +#endif + #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"); + 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); - } -#endif - return fd; -#else - return -1; + int flags = fcntl(fd, F_GETFD); + if (flags != -1) { + flags |= FD_CLOEXEC; + (void) fcntl(fd, F_SETFD, &flags); + } #endif + return fd; + } + + return -1; } static int diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/Xext/sleepuntil.c new/xserver-1.20.6+0/Xext/sleepuntil.c --- old/xserver-1.20.5+24/Xext/sleepuntil.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/Xext/sleepuntil.c 2019-11-22 23:56:38.000000000 +0100 @@ -125,8 +125,7 @@ static void ClientAwaken(ClientPtr client, void *closure) { - if (!client->clientGone) - AttendClient(client); + AttendClient(client); } static int diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/configure.ac new/xserver-1.20.6+0/configure.ac --- old/xserver-1.20.5+24/configure.ac 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/configure.ac 2019-11-22 23:56:38.000000000 +0100 @@ -26,9 +26,9 @@ dnl Process this file with autoconf to create configure. AC_PREREQ(2.60) -AC_INIT([xorg-server], 1.20.5, [https://gitlab.freedesktop.org/xorg/xserver/issues], xorg-server) -RELEASE_DATE="2019-05-30" -RELEASE_NAME="Red Lentil Dal" +AC_INIT([xorg-server], 1.20.6, [https://gitlab.freedesktop.org/xorg/xserver/issues], xorg-server) +RELEASE_DATE="2019-11-22" +RELEASE_NAME="Enchiladas de Queso" AC_CONFIG_SRCDIR([Makefile.am]) AC_CONFIG_MACRO_DIR([m4]) AM_INIT_AUTOMAKE([foreign dist-bzip2]) @@ -159,7 +159,7 @@ AC_CHECK_FUNCS([backtrace geteuid getuid issetugid getresuid \ getdtablesize getifaddrs getpeereid getpeerucred getprogname getzoneid \ mmap posix_fallocate seteuid shmctl64 strncasecmp vasprintf vsnprintf \ - walkcontext setitimer poll epoll_create1 mkostemp]) + walkcontext setitimer poll epoll_create1 mkostemp memfd_create isastream]) AC_CONFIG_LIBOBJ_DIR([os]) AC_REPLACE_FUNCS([reallocarray strcasecmp strcasestr strlcat strlcpy strndup\ timingsafe_memcmp]) @@ -765,7 +765,7 @@ LIBDRM="libdrm >= 2.4.89" LIBEGL="egl" LIBGBM="gbm >= 10.2.0" -LIBGL="gl >= 7.1.0" +LIBGL="gl >= 1.2" LIBXEXT="xext >= 1.0.99.4" LIBXFONT="xfont2 >= 2.0.0" LIBXI="xi >= 1.2.99.1" @@ -1116,55 +1116,12 @@ yes,yes | auto,yes) AC_DEFINE(DRI2, 1, [Build DRI2 extension]) DRI2=yes - LIBGL="gl >= 9.2.0" + LIBGL="gl >= 1.2" SDK_REQUIRED_MODULES="$SDK_REQUIRED_MODULES $DRI2PROTO" ;; 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 @@ -1281,7 +1238,7 @@ AM_CONDITIONAL(DRI3, test "x$DRI3" = xyes) -if test "x$DRI" = xyes || test "x$DRI2" = xyes || test "x$DRI3" = xyes || test "x$CONFIG_UDEV_KMS" = xyes; then +if test "x$DRI" = xyes || test "x$DRI2" = xyes || test "x$DRI3" = xyes || test "x$CONFIG_UDEV_KMS" = xyes || test "x$XORG" = xyes; then if test "x$DRM" = xyes; then AC_DEFINE(WITH_LIBDRM, 1, [Building with libdrm support]) PKG_CHECK_MODULES([LIBDRM], $LIBDRM) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/dix/dispatch.c new/xserver-1.20.6+0/dix/dispatch.c --- old/xserver-1.20.5+24/dix/dispatch.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/dix/dispatch.c 2019-11-22 23:56:38.000000000 +0100 @@ -2196,8 +2196,11 @@ return BadAlloc; WriteReplyToClient(client, sizeof(xGetImageReply), &xgi); - if (pDraw->type == DRAWABLE_WINDOW) + if (pDraw->type == DRAWABLE_WINDOW) { pVisibleRegion = &((WindowPtr) pDraw)->borderClip; + pDraw->pScreen->SourceValidate(pDraw, x, y, width, height, + IncludeInferiors); + } if (linesPerBuf == 0) { /* nothing to do */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/dix/dixutils.c new/xserver-1.20.6+0/dix/dixutils.c --- old/xserver-1.20.5+24/dix/dixutils.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/dix/dixutils.c 2019-11-22 23:56:38.000000000 +0100 @@ -662,14 +662,7 @@ if (q->client == client) { *prev = q->next; free(q); - if (client->clientGone) - /* Oops -- new zombie cleanup code ensures this only - * happens from inside CloseDownClient; don't want to - * recurse here... - */ - /* CloseDownClient(client) */ ; - else - AttendClient(client); + AttendClient(client); break; } prev = &q->next; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/dix/events.c new/xserver-1.20.6+0/dix/events.c --- old/xserver-1.20.5+24/dix/events.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/dix/events.c 2019-11-22 23:56:38.000000000 +0100 @@ -597,6 +597,8 @@ int x, y, off_x, off_y, i; + assert(!noPanoramiXExtension); + if (!XineramaSetWindowPntrs(pDev, pWin)) return; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/dix/pixmap.c new/xserver-1.20.6+0/dix/pixmap.c --- old/xserver-1.20.5+24/dix/pixmap.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/dix/pixmap.c 2019-11-22 23:56:38.000000000 +0100 @@ -32,6 +32,7 @@ #include <X11/X.h> #include "scrnintstr.h" +#include "mi.h" #include "misc.h" #include "os.h" #include "windowstr.h" @@ -395,7 +396,7 @@ * leaves the software cursor in place */ SourceValidate = pScreen->SourceValidate; - pScreen->SourceValidate = NULL; + pScreen->SourceValidate = miSourceValidate; RegionTranslate(&pixregion, dirty->x, dirty->y); RegionIntersect(&pixregion, &pixregion, region); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/doc/Xserver-spec.xml new/xserver-1.20.6+0/doc/Xserver-spec.xml --- old/xserver-1.20.5+24/doc/Xserver-spec.xml 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/doc/Xserver-spec.xml 2019-11-22 23:56:38.000000000 +0100 @@ -2930,8 +2930,8 @@ unsigned int subWindowMode; </programlisting></blockquote> -SourceValidate should be called by CopyArea/CopyPlane primitives when -the SourceValidate function pointer in the screen is non-null. If you know that +SourceValidate should be called by any primitive that reads from pDrawable. +If you know that you will never need SourceValidate, you can avoid this check. Currently, SourceValidate is used by the mi software cursor code to remove the cursor from the screen when the source rectangle overlaps the cursor position. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/glamor/glamor_egl.h new/xserver-1.20.6+0/glamor/glamor_egl.h --- old/xserver-1.20.5+24/glamor/glamor_egl.h 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/glamor/glamor_egl.h 2019-11-22 23:56:38.000000000 +0100 @@ -28,6 +28,7 @@ #define GLAMOR_EGL_H #define MESA_EGL_NO_X11_HEADERS +#define EGL_NO_X11 #include <epoxy/gl.h> #include <epoxy/egl.h> #include <glamor_egl_ext.h> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/glamor/glamor_priv.h new/xserver-1.20.6+0/glamor/glamor_priv.h --- old/xserver-1.20.5+24/glamor/glamor_priv.h 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/glamor/glamor_priv.h 2019-11-22 23:56:38.000000000 +0100 @@ -40,6 +40,7 @@ #include <epoxy/gl.h> #ifdef GLAMOR_HAS_GBM #define MESA_EGL_NO_X11_HEADERS +#define EGL_NO_X11 #include <epoxy/egl.h> #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/glx/glxdriswrast.c new/xserver-1.20.6+0/glx/glxdriswrast.c --- old/xserver-1.20.5+24/glx/glxdriswrast.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/glx/glxdriswrast.c 2019-11-22 23:56:38.000000000 +0100 @@ -324,6 +324,7 @@ ScreenPtr pScreen = pDraw->pScreen; __GLXcontext *cx = lastGLContext; + pScreen->SourceValidate(pDraw, x, y, w, h, IncludeInferiors); pScreen->GetImage(pDraw, x, y, w, h, ZPixmap, ~0L, data); if (cx != lastGLContext) { lastGLContext = cx; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/glx/meson.build new/xserver-1.20.6+0/glx/meson.build --- old/xserver-1.20.5+24/glx/meson.build 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/glx/meson.build 2019-11-22 23:56:38.000000000 +0100 @@ -39,7 +39,7 @@ common_dep, dl_dep, dependency('glproto', version: '>= 1.4.17'), - dependency('gl', version: '>= 9.2.0'), + dependency('gl', version: '>= 1.2'), ], c_args: [ glx_align64, @@ -74,7 +74,7 @@ common_dep, dl_dep, dependency('glproto', version: '>= 1.4.17'), - dependency('gl', version: '>= 9.2.0'), + dependency('gl', version: '>= 1.2'), ], ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/hw/xfree86/common/compiler.h new/xserver-1.20.6+0/hw/xfree86/common/compiler.h --- old/xserver-1.20.5+24/hw/xfree86/common/compiler.h 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/hw/xfree86/common/compiler.h 2019-11-22 23:56:38.000000000 +0100 @@ -758,36 +758,6 @@ return xf86ReadMmio32Le((void *) ioBase, port); } -#elif defined(__arm__) && defined(__linux__) - -/* for Linux on ARM, we use the LIBC inx/outx routines */ -/* note that the appropriate setup via "ioperm" needs to be done */ -/* *before* any inx/outx is done. */ - -#include <sys/io.h> - -static __inline__ void -xf_outb(unsigned short port, unsigned char val) -{ - outb(val, port); -} - -static __inline__ void -xf_outw(unsigned short port, unsigned short val) -{ - outw(val, port); -} - -static __inline__ void -xf_outl(unsigned short port, unsigned int val) -{ - outl(val, port); -} - -#define outb xf_outb -#define outw xf_outw -#define outl xf_outl - #elif defined(__nds32__) /* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/hw/xfree86/common/xf86Init.c new/xserver-1.20.6+0/hw/xfree86/common/xf86Init.c --- old/xserver-1.20.5+24/hw/xfree86/common/xf86Init.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/hw/xfree86/common/xf86Init.c 2019-11-22 23:56:38.000000000 +0100 @@ -682,36 +682,6 @@ if (!dixRegisterPrivateKey(&xf86ScreenKeyRec, PRIVATE_SCREEN, 0)) FatalError("Cannot register DDX private keys"); - for (i = 0; i < xf86NumGPUScreens; i++) { - ScrnInfoPtr pScrn = xf86GPUScreens[i]; - xf86VGAarbiterLock(pScrn); - - /* - * Almost everything uses these defaults, and many of those that - * don't, will wrap them. - */ - pScrn->EnableDisableFBAccess = xf86EnableDisableFBAccess; -#ifdef XFreeXDGA - pScrn->SetDGAMode = xf86SetDGAMode; -#endif - pScrn->DPMSSet = NULL; - pScrn->LoadPalette = NULL; - pScrn->SetOverscan = NULL; - pScrn->DriverFunc = NULL; - pScrn->pScreen = NULL; - scr_index = AddGPUScreen(xf86ScreenInit, argc, argv); - xf86VGAarbiterUnlock(pScrn); - if (scr_index == i) { - dixSetPrivate(&screenInfo.gpuscreens[scr_index]->devPrivates, - xf86ScreenKey, xf86GPUScreens[i]); - pScrn->pScreen = screenInfo.gpuscreens[scr_index]; - /* The driver should set this, but make sure it is set anyway */ - pScrn->vtSema = TRUE; - } else { - FatalError("AddScreen/ScreenInit failed for gpu driver %d %d\n", i, scr_index); - } - } - for (i = 0; i < xf86NumScreens; i++) { xf86VGAarbiterLock(xf86Screens[i]); /* @@ -767,6 +737,36 @@ xf86EnsureRANDR(xf86Screens[i]->pScreen); } + for (i = 0; i < xf86NumGPUScreens; i++) { + ScrnInfoPtr pScrn = xf86GPUScreens[i]; + xf86VGAarbiterLock(pScrn); + + /* + * Almost everything uses these defaults, and many of those that + * don't, will wrap them. + */ + pScrn->EnableDisableFBAccess = xf86EnableDisableFBAccess; +#ifdef XFreeXDGA + pScrn->SetDGAMode = xf86SetDGAMode; +#endif + pScrn->DPMSSet = NULL; + pScrn->LoadPalette = NULL; + pScrn->SetOverscan = NULL; + pScrn->DriverFunc = NULL; + pScrn->pScreen = NULL; + scr_index = AddGPUScreen(xf86ScreenInit, argc, argv); + xf86VGAarbiterUnlock(pScrn); + if (scr_index == i) { + dixSetPrivate(&screenInfo.gpuscreens[scr_index]->devPrivates, + xf86ScreenKey, xf86GPUScreens[i]); + pScrn->pScreen = screenInfo.gpuscreens[scr_index]; + /* The driver should set this, but make sure it is set anyway */ + pScrn->vtSema = TRUE; + } else { + FatalError("AddScreen/ScreenInit failed for gpu driver %d %d\n", i, scr_index); + } + } + for (i = 0; i < xf86NumGPUScreens; i++) AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/hw/xfree86/drivers/modesetting/Makefile.am new/xserver-1.20.6+0/hw/xfree86/drivers/modesetting/Makefile.am --- old/xserver-1.20.5+24/hw/xfree86/drivers/modesetting/Makefile.am 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/hw/xfree86/drivers/modesetting/Makefile.am 2019-11-22 23:56:38.000000000 +0100 @@ -24,6 +24,8 @@ # _ladir passes a dummy rpath to libtool so the thing will actually link # TODO: -nostdlib/-Bstatic/-lgcc platform magic, not installing the .a, etc. +include $(top_srcdir)/manpages.am + AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS) $(LIBDRM_CFLAGS) $(UDEV_CFLAGS) $(CWARNFLAGS) AM_CPPFLAGS = \ @@ -62,9 +64,3 @@ EXTRA_DIST = modesetting.man CLEANFILES = $(driverman_DATA) - -# String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure -SUFFIXES = .$(DRIVER_MAN_SUFFIX) .man - -.man.$(DRIVER_MAN_SUFFIX): - $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/hw/xfree86/drivers/modesetting/driver.h new/xserver-1.20.6+0/hw/xfree86/drivers/modesetting/driver.h --- old/xserver-1.20.5+24/hw/xfree86/drivers/modesetting/driver.h 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/hw/xfree86/drivers/modesetting/driver.h 2019-11-22 23:56:38.000000000 +0100 @@ -147,6 +147,7 @@ Bool ms_crtc_on(xf86CrtcPtr crtc); xf86CrtcPtr ms_dri2_crtc_covering_drawable(DrawablePtr pDraw); +RRCrtcPtr ms_randr_crtc_covering_drawable(DrawablePtr pDraw); int ms_get_crtc_ust_msc(xf86CrtcPtr crtc, CARD64 *ust, CARD64 *msc); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/hw/xfree86/drivers/modesetting/present.c new/xserver-1.20.6+0/hw/xfree86/drivers/modesetting/present.c --- old/xserver-1.20.5+24/hw/xfree86/drivers/modesetting/present.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/hw/xfree86/drivers/modesetting/present.c 2019-11-22 23:56:38.000000000 +0100 @@ -59,8 +59,7 @@ static RRCrtcPtr ms_present_get_crtc(WindowPtr window) { - xf86CrtcPtr xf86_crtc = ms_dri2_crtc_covering_drawable(&window->drawable); - return xf86_crtc ? xf86_crtc->randr_crtc : NULL; + return ms_randr_crtc_covering_drawable(&window->drawable); } static int diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/hw/xfree86/drivers/modesetting/vblank.c new/xserver-1.20.6+0/hw/xfree86/drivers/modesetting/vblank.c --- old/xserver-1.20.5+24/hw/xfree86/drivers/modesetting/vblank.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/hw/xfree86/drivers/modesetting/vblank.c 2019-11-22 23:56:38.000000000 +0100 @@ -77,6 +77,28 @@ crtc_box->x1 = crtc_box->x2 = crtc_box->y1 = crtc_box->y2 = 0; } +static void ms_randr_crtc_box(RRCrtcPtr crtc, BoxPtr crtc_box) +{ + if (crtc->mode) { + crtc_box->x1 = crtc->x; + crtc_box->y1 = crtc->y; + switch (crtc->rotation) { + case RR_Rotate_0: + case RR_Rotate_180: + default: + crtc_box->x2 = crtc->x + crtc->mode->mode.width; + crtc_box->y2 = crtc->y + crtc->mode->mode.height; + break; + case RR_Rotate_90: + case RR_Rotate_270: + crtc_box->x2 = crtc->x + crtc->mode->mode.height; + crtc_box->y2 = crtc->y + crtc->mode->mode.width; + break; + } + } else + crtc_box->x1 = crtc_box->x2 = crtc_box->y1 = crtc_box->y2 = 0; +} + static int ms_box_area(BoxPtr box) { return (int)(box->x2 - box->x1) * (int)(box->y2 - box->y1); @@ -91,12 +113,45 @@ } /* + * Return the first output which is connected to an active CRTC on this screen. + * + * RRFirstOutput() will return an output from a slave screen if it is primary, + * which is not the behavior that ms_covering_crtc() wants. + */ + +static RROutputPtr ms_first_output(ScreenPtr pScreen) +{ + rrScrPriv(pScreen); + RROutputPtr output; + int i, j; + + if (!pScrPriv) + return NULL; + + if (pScrPriv->primaryOutput && pScrPriv->primaryOutput->crtc && + (pScrPriv->primaryOutput->pScreen == pScreen)) { + return pScrPriv->primaryOutput; + } + + for (i = 0; i < pScrPriv->numCrtcs; i++) { + RRCrtcPtr crtc = pScrPriv->crtcs[i]; + + for (j = 0; j < pScrPriv->numOutputs; j++) { + output = pScrPriv->outputs[j]; + if (output->crtc == crtc) + return output; + } + } + return NULL; +} + +/* * Return the crtc covering 'box'. If two crtcs cover a portion of * 'box', then prefer the crtc with greater coverage. */ static xf86CrtcPtr -ms_covering_crtc(ScreenPtr pScreen, BoxPtr box, Bool screen_is_ms) +ms_covering_xf86_crtc(ScreenPtr pScreen, BoxPtr box, Bool screen_is_ms) { ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen); xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); @@ -108,6 +163,10 @@ best_crtc = NULL; best_coverage = 0; + + if (!xf86_config) + return NULL; + for (c = 0; c < xf86_config->num_crtc; c++) { crtc = xf86_config->crtc[c]; @@ -135,7 +194,7 @@ ScreenPtr slave; if (dixPrivateKeyRegistered(rrPrivKey)) - primary_output = RRFirstOutput(scrn->pScreen); + primary_output = ms_first_output(scrn->pScreen); if (!primary_output || !primary_output->crtc) return NULL; @@ -147,7 +206,74 @@ if (!slave->is_output_slave) continue; - if (ms_covering_crtc(slave, box, FALSE)) { + if (ms_covering_xf86_crtc(slave, box, FALSE)) { + /* The drawable is on a slave output, return primary crtc */ + return crtc; + } + } + } + + return best_crtc; +} + +static RRCrtcPtr +ms_covering_randr_crtc(ScreenPtr pScreen, BoxPtr box, Bool screen_is_ms) +{ + ScrnInfoPtr scrn = xf86ScreenToScrn(pScreen); + rrScrPrivPtr pScrPriv = rrGetScrPriv(pScreen); + RRCrtcPtr crtc, best_crtc; + int coverage, best_coverage; + int c; + BoxRec crtc_box, cover_box; + Bool crtc_on; + + best_crtc = NULL; + best_coverage = 0; + + if (!pScrPriv) + return NULL; + + for (c = 0; c < pScrPriv->numCrtcs; c++) { + crtc = pScrPriv->crtcs[c]; + + if (screen_is_ms) { + crtc_on = ms_crtc_on((xf86CrtcPtr) crtc->devPrivate); + } else { + crtc_on = !!crtc->mode; + } + + /* If the CRTC is off, treat it as not covering */ + if (!crtc_on) + continue; + + ms_randr_crtc_box(crtc, &crtc_box); + ms_box_intersect(&cover_box, &crtc_box, box); + coverage = ms_box_area(&cover_box); + if (coverage > best_coverage) { + best_crtc = crtc; + best_coverage = coverage; + } + } + + /* Fallback to primary crtc for drawable's on slave outputs */ + if (best_crtc == NULL && !pScreen->isGPU) { + RROutputPtr primary_output = NULL; + ScreenPtr slave; + + if (dixPrivateKeyRegistered(rrPrivKey)) + primary_output = ms_first_output(scrn->pScreen); + if (!primary_output || !primary_output->crtc) + return NULL; + + crtc = primary_output->crtc; + if (!ms_crtc_on((xf86CrtcPtr) crtc->devPrivate)) + return NULL; + + xorg_list_for_each_entry(slave, &pScreen->slave_list, slave_head) { + if (!slave->is_output_slave) + continue; + + if (ms_covering_randr_crtc(slave, box, FALSE)) { /* The drawable is on a slave output, return primary crtc */ return crtc; } @@ -168,7 +294,21 @@ box.x2 = box.x1 + pDraw->width; box.y2 = box.y1 + pDraw->height; - return ms_covering_crtc(pScreen, &box, TRUE); + return ms_covering_xf86_crtc(pScreen, &box, TRUE); +} + +RRCrtcPtr +ms_randr_crtc_covering_drawable(DrawablePtr pDraw) +{ + ScreenPtr pScreen = pDraw->pScreen; + BoxRec box; + + box.x1 = pDraw->x; + box.y1 = pDraw->y; + box.x2 = box.x1 + pDraw->width; + box.y2 = box.y1 + pDraw->height; + + return ms_covering_randr_crtc(pScreen, &box, TRUE); } static Bool diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/hw/xfree86/modes/xf86Rotate.c new/xserver-1.20.6+0/hw/xfree86/modes/xf86Rotate.c --- old/xserver-1.20.5+24/hw/xfree86/modes/xf86Rotate.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/hw/xfree86/modes/xf86Rotate.c 2019-11-22 23:56:38.000000000 +0100 @@ -28,7 +28,7 @@ #include <stddef.h> #include <string.h> #include <stdio.h> - +#include "mi.h" #include "xf86.h" #include "xf86DDC.h" #include "windowstr.h" @@ -191,7 +191,7 @@ * leaves the software cursor in place */ SourceValidate = pScreen->SourceValidate; - pScreen->SourceValidate = NULL; + pScreen->SourceValidate = miSourceValidate; for (c = 0; c < xf86_config->num_crtc; c++) { xf86CrtcPtr crtc = xf86_config->crtc[c]; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/hw/xfree86/os-support/shared/sigio.c new/xserver-1.20.6+0/hw/xfree86/os-support/shared/sigio.c --- old/xserver-1.20.5+24/hw/xfree86/os-support/shared/sigio.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/hw/xfree86/os-support/shared/sigio.c 2019-11-22 23:56:38.000000000 +0100 @@ -208,7 +208,8 @@ } } #endif -#ifdef I_SETSIG /* System V Streams - used on Solaris for input devices */ +#if defined(I_SETSIG) && defined(HAVE_ISASTREAM) + /* System V Streams - used on Solaris for input devices */ if (!installed && isastream(fd)) { if (ioctl(fd, I_SETSIG, S_INPUT | S_ERROR | S_HANGUP) == -1) { xf86Msg(X_WARNING, "fcntl(%d, I_SETSIG): %s\n", @@ -279,7 +280,7 @@ #ifdef O_ASYNC fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) & ~O_ASYNC); #endif -#ifdef I_SETSIG +#if defined(I_SETSIG) && defined(HAVE_ISASTREAM) if (isastream(fd)) { if (ioctl(fd, I_SETSIG, 0) == -1) { xf86Msg(X_WARNING, "fcntl(%d, I_SETSIG, 0): %s\n", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/hw/xnest/Screen.c new/xserver-1.20.6+0/hw/xnest/Screen.c --- old/xserver-1.20.5+24/hw/xnest/Screen.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/hw/xnest/Screen.c 2019-11-22 23:56:38.000000000 +0100 @@ -263,7 +263,6 @@ pScreen->SaveScreen = xnestSaveScreen; pScreen->GetImage = xnestGetImage; pScreen->GetSpans = xnestGetSpans; - pScreen->SourceValidate = NULL; /* Window Procedures */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/hw/xwayland/xwayland-glamor-eglstream.c new/xserver-1.20.6+0/hw/xwayland/xwayland-glamor-eglstream.c --- old/xserver-1.20.5+24/hw/xwayland/xwayland-glamor-eglstream.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/hw/xwayland/xwayland-glamor-eglstream.c 2019-11-22 23:56:38.000000000 +0100 @@ -33,6 +33,7 @@ #include "wayland-eglstream-controller-client-protocol.h" #define MESA_EGL_NO_X11_HEADERS +#define EGL_NO_X11 #include <glamor_egl.h> #include <glamor.h> #include <glamor_transform.h> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/hw/xwayland/xwayland-glamor-gbm.c new/xserver-1.20.6+0/hw/xwayland/xwayland-glamor-gbm.c --- old/xserver-1.20.5+24/hw/xwayland/xwayland-glamor-gbm.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/hw/xwayland/xwayland-glamor-gbm.c 2019-11-22 23:56:38.000000000 +0100 @@ -36,6 +36,7 @@ #include <drm_fourcc.h> #define MESA_EGL_NO_X11_HEADERS +#define EGL_NO_X11 #include <gbm.h> #include <glamor_egl.h> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/hw/xwayland/xwayland-glamor.c new/xserver-1.20.6+0/hw/xwayland/xwayland-glamor.c --- old/xserver-1.20.5+24/hw/xwayland/xwayland-glamor.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/hw/xwayland/xwayland-glamor.c 2019-11-22 23:56:38.000000000 +0100 @@ -26,6 +26,7 @@ #include "xwayland.h" #define MESA_EGL_NO_X11_HEADERS +#define EGL_NO_X11 #include <glamor_egl.h> #include <glamor.h> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/include/dix-config.h.in new/xserver-1.20.6+0/include/dix-config.h.in --- old/xserver-1.20.5+24/include/dix-config.h.in 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/include/dix-config.h.in 2019-11-22 23:56:38.000000000 +0100 @@ -134,6 +134,9 @@ /* Define to 1 if you have the <linux/fb.h> header file. */ #undef HAVE_LINUX_FB_H +/* Define to 1 if you have the `memfd_create' function. */ +#undef HAVE_MEMFD_CREATE + /* Define to 1 if you have the `mkostemp' function. */ #undef HAVE_MKOSTEMP @@ -458,9 +461,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 @@ -515,4 +515,7 @@ /* Have epoll_create1() */ #undef HAVE_EPOLL_CREATE1 +/* Have isastream */ +#undef HAVE_ISASTREAM + #endif /* _DIX_CONFIG_H_ */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/include/meson.build new/xserver-1.20.6+0/include/meson.build --- old/xserver-1.20.5+24/include/meson.build 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/include/meson.build 2019-11-22 23:56:38.000000000 +0100 @@ -70,11 +70,6 @@ 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', @@ -119,12 +114,14 @@ conf_data.set('HAVE_EPOLL_CREATE1', cc.has_function('epoll_create1')) conf_data.set('HAVE_GETUID', cc.has_function('getuid')) conf_data.set('HAVE_GETEUID', cc.has_function('geteuid')) +conf_data.set('HAVE_ISASTREAM', cc.has_function('isastream')) conf_data.set('HAVE_ISSETUGID', cc.has_function('issetugid')) conf_data.set('HAVE_GETIFADDRS', cc.has_function('getifaddrs')) conf_data.set('HAVE_GETPEEREID', cc.has_function('getpeereid')) conf_data.set('HAVE_GETPEERUCRED', cc.has_function('getpeerucred')) conf_data.set('HAVE_GETPROGNAME', cc.has_function('getprogname')) conf_data.set('HAVE_GETZONEID', cc.has_function('getzoneid')) +conf_data.set('HAVE_MEMFD_CREATE', cc.has_function('memfd_create')) conf_data.set('HAVE_MKOSTEMP', cc.has_function('mkostemp')) conf_data.set('HAVE_MMAP', cc.has_function('mmap')) conf_data.set('HAVE_POLL', cc.has_function('poll')) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/meson.build new/xserver-1.20.6+0/meson.build --- old/xserver-1.20.5+24/meson.build 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/meson.build 2019-11-22 23:56:38.000000000 +0100 @@ -3,7 +3,7 @@ 'buildtype=debugoptimized', 'c_std=gnu99', ], - version: '1.20.5', + version: '1.20.6', meson_version: '>= 0.42.0', ) add_project_arguments('-DHAVE_DIX_CONFIG_H', language: 'c') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/mi/mi.h new/xserver-1.20.6+0/mi/mi.h --- old/xserver-1.20.5+24/mi/mi.h 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/mi/mi.h 2019-11-22 23:56:38.000000000 +0100 @@ -360,6 +360,10 @@ /* miscrinit.c */ +extern _X_EXPORT void +miSourceValidate(DrawablePtr pDrawable, int x, int y, int w, int h, + unsigned int subWindowMode); + extern _X_EXPORT Bool miModifyPixmapHeader(PixmapPtr pPixmap, int width, int height, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/mi/miscrinit.c new/xserver-1.20.6+0/mi/miscrinit.c --- old/xserver-1.20.5+24/mi/miscrinit.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/mi/miscrinit.c 2019-11-22 23:56:38.000000000 +0100 @@ -124,6 +124,12 @@ return ((*pScreen->DestroyPixmap) ((PixmapPtr) pScreen->devPrivate)); } +void +miSourceValidate(DrawablePtr pDrawable, int x, int y, int w, int h, + unsigned int subWindowMode) +{ +} + /* With the introduction of pixmap privates, the "screen pixmap" can no * longer be created in miScreenInit, since all the modules that could * possibly ask for pixmap private space have not been initialized at @@ -243,7 +249,7 @@ } /* else CloseScreen */ /* QueryBestSize, SaveScreen, GetImage, GetSpans */ - pScreen->SourceValidate = (SourceValidateProcPtr) 0; + pScreen->SourceValidate = miSourceValidate; /* CreateWindow, DestroyWindow, PositionWindow, ChangeWindowAttributes */ /* RealizeWindow, UnrealizeWindow */ pScreen->ValidateTree = miValidateTree; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/os/connection.c new/xserver-1.20.6+0/os/connection.c --- old/xserver-1.20.5+24/os/connection.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/os/connection.c 2019-11-22 23:56:38.000000000 +0100 @@ -935,6 +935,14 @@ { OsCommPtr oc = (OsCommPtr) client->osPrivate; + if (client->clientGone) { + /* + * client is gone, so any pending requests will be dropped and its + * ignore count doesn't matter. + */ + return; + } + client->ignoreCount--; if (client->ignoreCount) return; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/present/present_wnmd.c new/xserver-1.20.6+0/present/present_wnmd.c --- old/xserver-1.20.5+24/present/present_wnmd.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/present/present_wnmd.c 2019-11-22 23:56:38.000000000 +0100 @@ -649,8 +649,6 @@ present_window_priv_ptr window_priv = present_window_priv(window); present_vblank_ptr vblank; - assert(crtc); - (*screen_priv->wnmd_info->abort_vblank) (window, crtc, event_id, msc); xorg_list_for_each_entry(vblank, &window_priv->exec_queue, event_queue) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/randr/rrcrtc.c new/xserver-1.20.6+0/randr/rrcrtc.c --- old/xserver-1.20.5+24/randr/rrcrtc.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/randr/rrcrtc.c 2019-11-22 23:56:38.000000000 +0100 @@ -401,17 +401,22 @@ if (crtc->scanout_pixmap_back) { pScrPriv->rrDisableSharedPixmapFlipping(crtc); - master->StopFlippingPixmapTracking(mrootdraw, - crtc->scanout_pixmap, - crtc->scanout_pixmap_back); + if (mrootdraw) { + master->StopFlippingPixmapTracking(mrootdraw, + crtc->scanout_pixmap, + crtc->scanout_pixmap_back); + } rrDestroySharedPixmap(crtc, crtc->scanout_pixmap_back); crtc->scanout_pixmap_back = NULL; } else { pScrPriv->rrCrtcSetScanoutPixmap(crtc, NULL); - master->StopPixmapTracking(mrootdraw, - crtc->scanout_pixmap); + + if (mrootdraw) { + master->StopPixmapTracking(mrootdraw, + crtc->scanout_pixmap); + } } rrDestroySharedPixmap(crtc, crtc->scanout_pixmap); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/record/record.c new/xserver-1.20.6+0/record/record.c --- old/xserver-1.20.5+24/record/record.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/record/record.c 2019-11-22 23:56:38.000000000 +0100 @@ -2362,9 +2362,9 @@ if (!pContext->pRecordingClient->clientGone) { RecordAProtocolElement(pContext, NULL, XRecordEndOfData, NULL, 0, 0, 0); RecordFlushReplyBuffer(pContext, NULL, 0, NULL, 0); - /* Re-enable request processing on this connection. */ - AttendClient(pContext->pRecordingClient); } + /* Re-enable request processing on this connection. */ + AttendClient(pContext->pRecordingClient); for (pRCAP = pContext->pListOfRCAP; pRCAP; pRCAP = pRCAP->pNextRCAP) { RecordUninstallHooks(pRCAP, 0); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xserver-1.20.5+24/render/render.c new/xserver-1.20.6+0/render/render.c --- old/xserver-1.20.5+24/render/render.c 2019-10-14 07:36:17.000000000 +0200 +++ new/xserver-1.20.6+0/render/render.c 2019-11-22 23:56:38.000000000 +0100 @@ -1492,6 +1492,11 @@ return BadAlloc; } + /* what kind of maniac creates a cursor from a window picture though */ + if (pSrc->pDrawable->type == DRAWABLE_WINDOW) + pScreen->SourceValidate(pSrc->pDrawable, 0, 0, width, height, + IncludeInferiors); + if (pSrc->format == PICT_a8r8g8b8) { (*pScreen->GetImage) (pSrc->pDrawable, 0, 0, width, height, ZPixmap,
participants (1)
-
root