Date: Tuesday, March 19, 2019 @ 05:52:17 Author: heftig Revision: 348635
archrelease: copy trunk to extra-x86_64 Added: mutter/repos/extra-x86_64/216.patch (from rev 348633, mutter/trunk/216.patch) mutter/repos/extra-x86_64/PKGBUILD (from rev 348633, mutter/trunk/PKGBUILD) Deleted: mutter/repos/extra-x86_64/216.patch mutter/repos/extra-x86_64/PKGBUILD -----------+ 216.patch | 256 ++++++++++++++++++++++++++++++------------------------------ PKGBUILD | 108 ++++++++++++------------- 2 files changed, 182 insertions(+), 182 deletions(-) Deleted: 216.patch =================================================================== --- 216.patch 2019-03-19 05:52:14 UTC (rev 348634) +++ 216.patch 2019-03-19 05:52:17 UTC (rev 348635) @@ -1,128 +0,0 @@ -From 6d8d73beeef3a618c553e89b0b3e532ec3654a30 Mon Sep 17 00:00:00 2001 -From: Daniel van Vugt <daniel.van.v...@canonical.com> -Date: Mon, 23 Jul 2018 16:28:56 +0800 -Subject: [PATCH] cogl-winsys-glx: Fix frame notification race/leak - -If a second `set_{sync,complete}_pending` was queued before the idle -handler had flushed the first then one of them would be forgotten. -It would stay queued forever and never emitted as a notification. - -This could happen repeatedly causing a slow leak. But worse still, -`clutter-stage-cogl` would then have `pending_swaps` permanently stuck -above zero preventing the presentation timing logic from being used. - -The problem is that a boolean can only count to one, but in some cases -(triple buffering, whether intentional or accidental #334) we need it to -count to two. So just change booleans to integers and count properly. - -https://gitlab.gnome.org/GNOME/mutter/merge_requests/216 ---- - cogl/cogl/winsys/cogl-winsys-glx.c | 58 +++++++++++++++--------------- - 1 file changed, 29 insertions(+), 29 deletions(-) - -diff --git a/cogl/cogl/winsys/cogl-winsys-glx.c b/cogl/cogl/winsys/cogl-winsys-glx.c -index 2623d02c6..235cfe81f 100644 ---- a/cogl/cogl/winsys/cogl-winsys-glx.c -+++ b/cogl/cogl/winsys/cogl-winsys-glx.c -@@ -99,9 +99,9 @@ typedef struct _CoglOnscreenGLX - CoglOnscreenXlib _parent; - GLXDrawable glxwin; - uint32_t last_swap_vsync_counter; -- gboolean pending_sync_notify; -- gboolean pending_complete_notify; -- gboolean pending_resize_notify; -+ uint32_t pending_sync_notify; -+ uint32_t pending_complete_notify; -+ uint32_t pending_resize_notify; - - GThread *swap_wait_thread; - GQueue *swap_wait_queue; -@@ -347,35 +347,35 @@ flush_pending_notifications_cb (void *data, - { - CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer); - CoglOnscreenGLX *glx_onscreen = onscreen->winsys; -- gboolean pending_sync_notify = glx_onscreen->pending_sync_notify; -- gboolean pending_complete_notify = glx_onscreen->pending_complete_notify; - -- /* If swap_region is called then notifying the sync event could -- * potentially immediately queue a subsequent pending notify so -- * we need to clear the flag before invoking the callback */ -- glx_onscreen->pending_sync_notify = FALSE; -- glx_onscreen->pending_complete_notify = FALSE; -- -- if (pending_sync_notify) -+ while (glx_onscreen->pending_sync_notify > 0 || -+ glx_onscreen->pending_complete_notify > 0 || -+ glx_onscreen->pending_resize_notify > 0) - { -- CoglFrameInfo *info = g_queue_peek_head (&onscreen->pending_frame_infos); -- -- _cogl_onscreen_notify_frame_sync (onscreen, info); -- } -+ if (glx_onscreen->pending_sync_notify > 0) -+ { -+ CoglFrameInfo *info = -+ g_queue_peek_head (&onscreen->pending_frame_infos); - -- if (pending_complete_notify) -- { -- CoglFrameInfo *info = g_queue_pop_head (&onscreen->pending_frame_infos); -+ _cogl_onscreen_notify_frame_sync (onscreen, info); -+ glx_onscreen->pending_sync_notify--; -+ } - -- _cogl_onscreen_notify_complete (onscreen, info); -+ if (glx_onscreen->pending_complete_notify > 0) -+ { -+ CoglFrameInfo *info = -+ g_queue_pop_head (&onscreen->pending_frame_infos); - -- cogl_object_unref (info); -- } -+ _cogl_onscreen_notify_complete (onscreen, info); -+ cogl_object_unref (info); -+ glx_onscreen->pending_complete_notify--; -+ } - -- if (glx_onscreen->pending_resize_notify) -- { -- _cogl_onscreen_notify_resize (onscreen); -- glx_onscreen->pending_resize_notify = FALSE; -+ if (glx_onscreen->pending_resize_notify > 0) -+ { -+ _cogl_onscreen_notify_resize (onscreen); -+ glx_onscreen->pending_resize_notify--; -+ } - } - } - } -@@ -417,7 +417,7 @@ set_sync_pending (CoglOnscreen *onscreen) - NULL); - } - -- glx_onscreen->pending_sync_notify = TRUE; -+ glx_onscreen->pending_sync_notify++; - } - - static void -@@ -440,7 +440,7 @@ set_complete_pending (CoglOnscreen *onscreen) - NULL); - } - -- glx_onscreen->pending_complete_notify = TRUE; -+ glx_onscreen->pending_complete_notify++; - } - - static void -@@ -533,7 +533,7 @@ notify_resize (CoglContext *context, - NULL); - } - -- glx_onscreen->pending_resize_notify = TRUE; -+ glx_onscreen->pending_resize_notify++; - - if (!xlib_onscreen->is_foreign_xwin) - { --- -2.18.1 - Copied: mutter/repos/extra-x86_64/216.patch (from rev 348633, mutter/trunk/216.patch) =================================================================== --- 216.patch (rev 0) +++ 216.patch 2019-03-19 05:52:17 UTC (rev 348635) @@ -0,0 +1,128 @@ +From 6d8d73beeef3a618c553e89b0b3e532ec3654a30 Mon Sep 17 00:00:00 2001 +From: Daniel van Vugt <daniel.van.v...@canonical.com> +Date: Mon, 23 Jul 2018 16:28:56 +0800 +Subject: [PATCH] cogl-winsys-glx: Fix frame notification race/leak + +If a second `set_{sync,complete}_pending` was queued before the idle +handler had flushed the first then one of them would be forgotten. +It would stay queued forever and never emitted as a notification. + +This could happen repeatedly causing a slow leak. But worse still, +`clutter-stage-cogl` would then have `pending_swaps` permanently stuck +above zero preventing the presentation timing logic from being used. + +The problem is that a boolean can only count to one, but in some cases +(triple buffering, whether intentional or accidental #334) we need it to +count to two. So just change booleans to integers and count properly. + +https://gitlab.gnome.org/GNOME/mutter/merge_requests/216 +--- + cogl/cogl/winsys/cogl-winsys-glx.c | 58 +++++++++++++++--------------- + 1 file changed, 29 insertions(+), 29 deletions(-) + +diff --git a/cogl/cogl/winsys/cogl-winsys-glx.c b/cogl/cogl/winsys/cogl-winsys-glx.c +index 2623d02c6..235cfe81f 100644 +--- a/cogl/cogl/winsys/cogl-winsys-glx.c ++++ b/cogl/cogl/winsys/cogl-winsys-glx.c +@@ -99,9 +99,9 @@ typedef struct _CoglOnscreenGLX + CoglOnscreenXlib _parent; + GLXDrawable glxwin; + uint32_t last_swap_vsync_counter; +- gboolean pending_sync_notify; +- gboolean pending_complete_notify; +- gboolean pending_resize_notify; ++ uint32_t pending_sync_notify; ++ uint32_t pending_complete_notify; ++ uint32_t pending_resize_notify; + + GThread *swap_wait_thread; + GQueue *swap_wait_queue; +@@ -347,35 +347,35 @@ flush_pending_notifications_cb (void *data, + { + CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer); + CoglOnscreenGLX *glx_onscreen = onscreen->winsys; +- gboolean pending_sync_notify = glx_onscreen->pending_sync_notify; +- gboolean pending_complete_notify = glx_onscreen->pending_complete_notify; + +- /* If swap_region is called then notifying the sync event could +- * potentially immediately queue a subsequent pending notify so +- * we need to clear the flag before invoking the callback */ +- glx_onscreen->pending_sync_notify = FALSE; +- glx_onscreen->pending_complete_notify = FALSE; +- +- if (pending_sync_notify) ++ while (glx_onscreen->pending_sync_notify > 0 || ++ glx_onscreen->pending_complete_notify > 0 || ++ glx_onscreen->pending_resize_notify > 0) + { +- CoglFrameInfo *info = g_queue_peek_head (&onscreen->pending_frame_infos); +- +- _cogl_onscreen_notify_frame_sync (onscreen, info); +- } ++ if (glx_onscreen->pending_sync_notify > 0) ++ { ++ CoglFrameInfo *info = ++ g_queue_peek_head (&onscreen->pending_frame_infos); + +- if (pending_complete_notify) +- { +- CoglFrameInfo *info = g_queue_pop_head (&onscreen->pending_frame_infos); ++ _cogl_onscreen_notify_frame_sync (onscreen, info); ++ glx_onscreen->pending_sync_notify--; ++ } + +- _cogl_onscreen_notify_complete (onscreen, info); ++ if (glx_onscreen->pending_complete_notify > 0) ++ { ++ CoglFrameInfo *info = ++ g_queue_pop_head (&onscreen->pending_frame_infos); + +- cogl_object_unref (info); +- } ++ _cogl_onscreen_notify_complete (onscreen, info); ++ cogl_object_unref (info); ++ glx_onscreen->pending_complete_notify--; ++ } + +- if (glx_onscreen->pending_resize_notify) +- { +- _cogl_onscreen_notify_resize (onscreen); +- glx_onscreen->pending_resize_notify = FALSE; ++ if (glx_onscreen->pending_resize_notify > 0) ++ { ++ _cogl_onscreen_notify_resize (onscreen); ++ glx_onscreen->pending_resize_notify--; ++ } + } + } + } +@@ -417,7 +417,7 @@ set_sync_pending (CoglOnscreen *onscreen) + NULL); + } + +- glx_onscreen->pending_sync_notify = TRUE; ++ glx_onscreen->pending_sync_notify++; + } + + static void +@@ -440,7 +440,7 @@ set_complete_pending (CoglOnscreen *onscreen) + NULL); + } + +- glx_onscreen->pending_complete_notify = TRUE; ++ glx_onscreen->pending_complete_notify++; + } + + static void +@@ -533,7 +533,7 @@ notify_resize (CoglContext *context, + NULL); + } + +- glx_onscreen->pending_resize_notify = TRUE; ++ glx_onscreen->pending_resize_notify++; + + if (!xlib_onscreen->is_foreign_xwin) + { +-- +2.18.1 + Deleted: PKGBUILD =================================================================== --- PKGBUILD 2019-03-19 05:52:14 UTC (rev 348634) +++ PKGBUILD 2019-03-19 05:52:17 UTC (rev 348635) @@ -1,54 +0,0 @@ -# Maintainer: Jan Alexander Steffens (heftig) <jan.steff...@gmail.com> -# Maintainer: Ionut Biru <ib...@archlinux.org> -# Contributor: Michael Kanis <mkanis_at_gmx_dot_de> - -pkgname=mutter -pkgver=3.32.0+15+gc96cf0608 -pkgrel=1 -pkgdesc="A window manager for GNOME" -url="https://gitlab.gnome.org/GNOME/mutter" -arch=(x86_64) -license=(GPL) -depends=(dconf gobject-introspection-runtime gsettings-desktop-schemas libcanberra - startup-notification zenity libsm gnome-desktop upower libxkbcommon-x11 - gnome-settings-daemon libgudev libinput pipewire xorg-server-xwayland) -makedepends=(gobject-introspection git egl-wayland meson xorg-server) -checkdepends=(xorg-server-xvfb) -groups=(gnome) -_commit=c96cf0608dd5e92369447ddbba9f63b7a2c84c0f # master -source=("git+https://gitlab.gnome.org/GNOME/mutter.git#commit=$_commit" - 216.patch) -sha256sums=('SKIP' - 'ed4f3cf738a3cffdf8a6e1a352bf24d74078c3b26fb9262c5746e0d95b9df756') - -pkgver() { - cd $pkgname - git describe --tags | sed 's/-/+/g' -} - -prepare() { - cd $pkgname - - # https://gitlab.gnome.org/GNOME/mutter/merge_requests/216 - git apply -3 ../216.patch -} - -build() { - arch-meson $pkgname build \ - -D egl_device=true \ - -D wayland_eglstream=true \ - -D installed_tests=false - ninja -C build -} - -check() ( - mkdir -p -m 700 "${XDG_RUNTIME_DIR:=$PWD/runtime-dir}" - glib-compile-schemas "${GSETTINGS_SCHEMA_DIR:=$PWD/build/data}" - export XDG_RUNTIME_DIR GSETTINGS_SCHEMA_DIR - - dbus-run-session xvfb-run -s '+iglx -noreset' meson test -C build -) - -package() { - DESTDIR="$pkgdir" meson install -C build -} Copied: mutter/repos/extra-x86_64/PKGBUILD (from rev 348633, mutter/trunk/PKGBUILD) =================================================================== --- PKGBUILD (rev 0) +++ PKGBUILD 2019-03-19 05:52:17 UTC (rev 348635) @@ -0,0 +1,54 @@ +# Maintainer: Jan Alexander Steffens (heftig) <jan.steff...@gmail.com> +# Maintainer: Ionut Biru <ib...@archlinux.org> +# Contributor: Michael Kanis <mkanis_at_gmx_dot_de> + +pkgname=mutter +pkgver=3.32.0+25+gf0b9654de +pkgrel=1 +pkgdesc="A window manager for GNOME" +url="https://gitlab.gnome.org/GNOME/mutter" +arch=(x86_64) +license=(GPL) +depends=(dconf gobject-introspection-runtime gsettings-desktop-schemas libcanberra + startup-notification zenity libsm gnome-desktop upower libxkbcommon-x11 + gnome-settings-daemon libgudev libinput pipewire xorg-server-xwayland) +makedepends=(gobject-introspection git egl-wayland meson xorg-server) +checkdepends=(xorg-server-xvfb) +groups=(gnome) +_commit=f0b9654deb947e49e42b76d6daa42b86e5b0ec17 # master +source=("git+https://gitlab.gnome.org/GNOME/mutter.git#commit=$_commit" + 216.patch) +sha256sums=('SKIP' + 'ed4f3cf738a3cffdf8a6e1a352bf24d74078c3b26fb9262c5746e0d95b9df756') + +pkgver() { + cd $pkgname + git describe --tags | sed 's/-/+/g' +} + +prepare() { + cd $pkgname + + # https://gitlab.gnome.org/GNOME/mutter/merge_requests/216 + git apply -3 ../216.patch +} + +build() { + arch-meson $pkgname build \ + -D egl_device=true \ + -D wayland_eglstream=true \ + -D installed_tests=false + ninja -C build +} + +check() ( + mkdir -p -m 700 "${XDG_RUNTIME_DIR:=$PWD/runtime-dir}" + glib-compile-schemas "${GSETTINGS_SCHEMA_DIR:=$PWD/build/data}" + export XDG_RUNTIME_DIR GSETTINGS_SCHEMA_DIR + + dbus-run-session xvfb-run -s '+iglx -noreset' meson test -C build +) + +package() { + DESTDIR="$pkgdir" meson install -C build +}