diff --git a/PKGBUILD b/PKGBUILD
index ad6dd8fa61584626bee4064cb03f5991c656d8e5..d90328e0a90b24d1eb667cddd1832653317d5c30 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -7,7 +7,7 @@ pkgbase=xorg-server
 pkgname=('xorg-server' 'xorg-server-xephyr' 'xorg-server-xdmx' 'xorg-server-xvfb' 'xorg-server-xnest' 
          'xorg-server-xwayland' 'xorg-server-common' 'xorg-server-devel')
 pkgver=1.20.0
-pkgrel=5
+pkgrel=6
 arch=('x86_64')
 license=('custom')
 groups=('xorg')
@@ -26,6 +26,8 @@ source=(https://xorg.freedesktop.org/releases/individual/xserver/${pkgbase}-${pk
         xserver-autobind-hotplug.patch
         xvfb-run # with updates from FC master
         xvfb-run.1
+        xserver-1-2-glamor-Always-return-0-from-glamor_fds_from_pixmap-on-error.patch
+        xserver-2-2-glamor-Propagate-glamor_fds_from_pixmap-error-in-glamor_fd_from_pixmap.patch
         0001-v2-FS-58644.patch)
 validpgpkeys=('7B27A3F1A6E18CD9588B4AE8310180050905E40C'
               'C383B778255613DFDB409D91DB221A6900000011'
@@ -49,6 +51,12 @@ prepare() {
   
   # https://bugs.freedesktop.org/show_bug.cgi?id=106588
   patch -Np1 -i ../0001-v2-FS-58644.patch
+  
+  # Fix XWayland hangs - FS#58705
+  # https://patchwork.freedesktop.org/series/43618/
+  patch -Np1 -i ../xserver-1-2-glamor-Always-return-0-from-glamor_fds_from_pixmap-on-error.patch
+  patch -Np1 -i ../xserver-2-2-glamor-Propagate-glamor_fds_from_pixmap-error-in-glamor_fd_from_pixmap.patch
+
 }
 
 build() {
diff --git a/xserver-1-2-glamor-Always-return-0-from-glamor_fds_from_pixmap-on-error.patch b/xserver-1-2-glamor-Always-return-0-from-glamor_fds_from_pixmap-on-error.patch
new file mode 100644
index 0000000000000000000000000000000000000000..604af0f8d3e1e7db8a10cc1a628a94a0c65a401f
--- /dev/null
+++ b/xserver-1-2-glamor-Always-return-0-from-glamor_fds_from_pixmap-on-error.patch
@@ -0,0 +1,28 @@
+diff --git a/glamor/glamor.c b/glamor/glamor.c
+index d984d20f3..e2c74d17a 100644
+--- a/glamor/glamor.c
++++ b/glamor/glamor.c
+@@ -836,20 +836,20 @@ glamor_fds_from_pixmap(ScreenPtr screen, PixmapPtr pixmap, int *fds,
+         glamor_get_screen_private(pixmap->drawable.pScreen);
+ 
+     if (!glamor_priv->dri3_enabled)
+-        return -1;
++        return 0;
+     switch (pixmap_priv->type) {
+     case GLAMOR_TEXTURE_DRM:
+     case GLAMOR_TEXTURE_ONLY:
+         if (!glamor_pixmap_ensure_fbo(pixmap, pixmap->drawable.depth == 30 ?
+                                       GL_RGB10_A2 : GL_RGBA, 0))
+-            return -1;
++            return 0;
+         return glamor_egl_fds_from_pixmap(screen, pixmap, fds,
+                                           strides, offsets,
+                                           modifier);
+     default:
+         break;
+     }
+-    return -1;
++    return 0;
+ }
+ 
+ _X_EXPORT int
diff --git a/xserver-2-2-glamor-Propagate-glamor_fds_from_pixmap-error-in-glamor_fd_from_pixmap.patch b/xserver-2-2-glamor-Propagate-glamor_fds_from_pixmap-error-in-glamor_fd_from_pixmap.patch
new file mode 100644
index 0000000000000000000000000000000000000000..beea2e4206f5650af4e8a3d81e970007a24e4735
--- /dev/null
+++ b/xserver-2-2-glamor-Propagate-glamor_fds_from_pixmap-error-in-glamor_fd_from_pixmap.patch
@@ -0,0 +1,29 @@
+diff --git a/glamor/glamor.c b/glamor/glamor.c
+index e2c74d17a..63f0947fa 100644
+--- a/glamor/glamor.c
++++ b/glamor/glamor.c
+@@ -865,17 +865,15 @@ glamor_fd_from_pixmap(ScreenPtr screen,
+                                  &modifier);
+ 
+     /* Pixmaps with multi-planes/modifier are not supported in this interface */
+-    if (ret > 1) {
+-        while (ret > 0)
+-            close(fds[--ret]);
+-        return -1;
++    if (ret == 1 && offsets[0] == 0) {
++        *stride = strides[0];
++        *size = pixmap->drawable.height * *stride;
++        return fds[0];
+     }
+ 
+-    ret = fds[0];
+-    *stride = strides[0];
+-    *size = pixmap->drawable.height * *stride;
+-
+-    return ret;
++    while (ret > 0)
++        close(fds[--ret]);
++    return -1;
+ }
+ 
+ _X_EXPORT int