diff --git a/0001-shm-Close-file-descriptors-not-needed.patch b/0001-shm-Close-file-descriptors-not-needed.patch new file mode 100644 index 0000000..6731d34 --- /dev/null +++ b/0001-shm-Close-file-descriptors-not-needed.patch @@ -0,0 +1,74 @@ +From 5c0a466e1757fc74dba32fdb1a9ad90eda8b4cdb Mon Sep 17 00:00:00 2001 +From: Olivier Fourdan +Date: Mon, 10 Jan 2022 15:10:07 +0100 +Subject: [PATCH] shm: Close file descriptors not needed + +Commit 5a981ee8 implemented a fallback path for platforms which do not +support mremap() such as FreeBSD. + +To do so, the file descriptor for the mmap() is not closed immediately +but instead kept as long as the pool exists. + +That induces more file descriptors kept open for longer, which in turn +may cause problems as wl_shm may be using a lot of file descriptors, +especially with Xwayland which can create a lot of pixmaps on behalf of +its X11 clients. + +For platforms where mremap() is available, keeping those file +descriptors opened is a bit of a waste and may cause exhaustion of file +descriptors sooner that before commit 5a981ee8. + +Only keep the mmap() file descriptor open on platforms which do not +implement mremap() and close it immediately as before on others. + +Signed-off-by: Olivier Fourdan +Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1283 +--- + src/wayland-shm.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/src/wayland-shm.c b/src/wayland-shm.c +index 28c550d..c4cd390 100644 +--- a/src/wayland-shm.c ++++ b/src/wayland-shm.c +@@ -65,10 +65,12 @@ struct wl_shm_pool { + char *data; + ssize_t size; + ssize_t new_size; ++#ifndef MREMAP_MAYMOVE + /* The following three fields are needed for mremap() emulation. */ + int mmap_fd; + int mmap_flags; + int mmap_prot; ++#endif + bool sigbus_is_impossible; + }; + +@@ -153,7 +155,9 @@ shm_pool_unref(struct wl_shm_pool *pool, bool external) + return; + + munmap(pool->data, pool->size); ++#ifndef MREMAP_MAYMOVE + close(pool->mmap_fd); ++#endif + free(pool); + } + +@@ -344,10 +348,14 @@ shm_create_pool(struct wl_client *client, struct wl_resource *resource, + strerror(errno)); + goto err_free; + } ++#ifndef MREMAP_MAYMOVE + /* We may need to keep the fd, prot and flags to emulate mremap(). */ + pool->mmap_fd = fd; + pool->mmap_prot = prot; + pool->mmap_flags = flags; ++#else ++ close(fd); ++#endif + pool->resource = + wl_resource_create(client, &wl_shm_pool_interface, 1, id); + if (!pool->resource) { +-- +2.35.1 + diff --git a/wayland.spec b/wayland.spec index 36249ec..61d0cac 100644 --- a/wayland.spec +++ b/wayland.spec @@ -1,12 +1,15 @@ Name: wayland Version: 1.20.0 -Release: 3%{?dist} +Release: 4%{?dist} Summary: Wayland Compositor Infrastructure License: MIT URL: http://wayland.freedesktop.org/ Source0: http://wayland.freedesktop.org/releases/%{name}-%{version}.tar.xz +# https://gitlab.freedesktop.org/wayland/wayland/-/merge_requests/203 +Patch0: 0001-shm-Close-file-descriptors-not-needed.patch + BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: docbook-style-xsl @@ -109,6 +112,10 @@ Wayland server library %{_libdir}/libwayland-server.so.0* %changelog +* Mon Mar 21 2022 Olivier Fourdan - 1.20.0-4 +- Close file descriptors not needed + rhbz#2062030 + * Sat Jan 22 2022 Fedora Release Engineering - 1.20.0-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild