wayland/cursor-role: Increase buffer use count on construction
https://bugzilla.redhat.com/show_bug.cgi?id=1373372
This commit is contained in:
parent
b1e2e0e766
commit
5996eaf8d9
@ -0,0 +1,85 @@
|
|||||||
|
From 50f565dc32a0ac511d12053a1bb1cb22ebf43e44 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||||
|
Date: Thu, 25 Aug 2016 17:38:45 +0800
|
||||||
|
Subject: [PATCH] wayland/cursor-role: Increase buffer use count on
|
||||||
|
construction
|
||||||
|
|
||||||
|
We may be assigned multiple times, if the surface is assigned to be a
|
||||||
|
cursor surface multiple times. Each time e.g. wl_pointer.set_cursor is
|
||||||
|
called, we'll be assigned.
|
||||||
|
|
||||||
|
While the role object exists, we'll handle buffer use count even when
|
||||||
|
we are not actively assigned, thus we should only handle the initial
|
||||||
|
assignment use count bump when constructing, so that we don't increase
|
||||||
|
it when reassigned, where the wl_resource may already have been
|
||||||
|
released.
|
||||||
|
|
||||||
|
https://bugzilla.gnome.org/show_bug.cgi?id=770402
|
||||||
|
---
|
||||||
|
src/wayland/meta-wayland-surface-role-cursor.c | 34 +++++++++++++++++---------
|
||||||
|
1 file changed, 23 insertions(+), 11 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/wayland/meta-wayland-surface-role-cursor.c b/src/wayland/meta-wayland-surface-role-cursor.c
|
||||||
|
index 2dbbc55..d63aed4 100644
|
||||||
|
--- a/src/wayland/meta-wayland-surface-role-cursor.c
|
||||||
|
+++ b/src/wayland/meta-wayland-surface-role-cursor.c
|
||||||
|
@@ -110,19 +110,8 @@ cursor_sprite_prepare_at (MetaCursorSprite *cursor_sprite,
|
||||||
|
static void
|
||||||
|
cursor_surface_role_assigned (MetaWaylandSurfaceRole *surface_role)
|
||||||
|
{
|
||||||
|
- MetaWaylandSurfaceRoleCursor *cursor_role =
|
||||||
|
- META_WAYLAND_SURFACE_ROLE_CURSOR (surface_role);
|
||||||
|
- MetaWaylandSurfaceRoleCursorPrivate *priv =
|
||||||
|
- meta_wayland_surface_role_cursor_get_instance_private (cursor_role);
|
||||||
|
MetaWaylandSurface *surface =
|
||||||
|
meta_wayland_surface_role_get_surface (surface_role);
|
||||||
|
- MetaWaylandBuffer *buffer = meta_wayland_surface_get_buffer (surface);
|
||||||
|
-
|
||||||
|
- if (buffer)
|
||||||
|
- {
|
||||||
|
- g_set_object (&priv->buffer, buffer);
|
||||||
|
- meta_wayland_surface_ref_buffer_use_count (surface);
|
||||||
|
- }
|
||||||
|
|
||||||
|
meta_wayland_surface_queue_pending_frame_callbacks (surface);
|
||||||
|
}
|
||||||
|
@@ -213,6 +202,28 @@ cursor_surface_role_dispose (GObject *object)
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
+cursor_surface_role_constructed (GObject *object)
|
||||||
|
+{
|
||||||
|
+ MetaWaylandSurfaceRoleCursor *cursor_role =
|
||||||
|
+ META_WAYLAND_SURFACE_ROLE_CURSOR (object);
|
||||||
|
+ MetaWaylandSurfaceRoleCursorPrivate *priv =
|
||||||
|
+ meta_wayland_surface_role_cursor_get_instance_private (cursor_role);
|
||||||
|
+ MetaWaylandSurfaceRole *surface_role =
|
||||||
|
+ META_WAYLAND_SURFACE_ROLE (cursor_role);
|
||||||
|
+ MetaWaylandSurface *surface =
|
||||||
|
+ meta_wayland_surface_role_get_surface (surface_role);
|
||||||
|
+ MetaWaylandBuffer *buffer;
|
||||||
|
+
|
||||||
|
+ buffer = meta_wayland_surface_get_buffer (surface);
|
||||||
|
+ if (buffer)
|
||||||
|
+ {
|
||||||
|
+ g_assert (buffer->resource);
|
||||||
|
+ g_set_object (&priv->buffer, buffer);
|
||||||
|
+ meta_wayland_surface_ref_buffer_use_count (surface);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
meta_wayland_surface_role_cursor_init (MetaWaylandSurfaceRoleCursor *role)
|
||||||
|
{
|
||||||
|
MetaWaylandSurfaceRoleCursorPrivate *priv =
|
||||||
|
@@ -238,6 +249,7 @@ meta_wayland_surface_role_cursor_class_init (MetaWaylandSurfaceRoleCursorClass *
|
||||||
|
surface_role_class->commit = cursor_surface_role_commit;
|
||||||
|
surface_role_class->is_on_output = cursor_surface_role_is_on_output;
|
||||||
|
|
||||||
|
+ object_class->constructed = cursor_surface_role_constructed;
|
||||||
|
object_class->dispose = cursor_surface_role_dispose;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.9.3
|
||||||
|
|
10
mutter.spec
10
mutter.spec
@ -5,15 +5,17 @@
|
|||||||
|
|
||||||
Name: mutter
|
Name: mutter
|
||||||
Version: 3.21.91
|
Version: 3.21.91
|
||||||
Release: 1%{?dist}
|
Release: 2%{?dist}
|
||||||
Summary: Window and compositing manager based on Clutter
|
Summary: Window and compositing manager based on Clutter
|
||||||
|
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
#VCS: git:git://git.gnome.org/mutter
|
#VCS: git:git://git.gnome.org/mutter
|
||||||
URL: http://www.gnome.org
|
URL: http://www.gnome.org
|
||||||
Source0: http://download.gnome.org/sources/%{name}/3.21/%{name}-%{version}.tar.xz
|
Source0: http://download.gnome.org/sources/%{name}/3.21/%{name}-%{version}.tar.xz
|
||||||
# https://bugzilla.gnome.org/show_bug.cgi?id=770557
|
# Backported from upstream
|
||||||
Patch0: clutterevdev-Fix-absolute-pointer-motion-events.patch
|
Patch0: clutterevdev-Fix-absolute-pointer-motion-events.patch
|
||||||
|
# Backported from upstream
|
||||||
|
Patch1: 0001-wayland-cursor-role-Increase-buffer-use-count-on-con.patch
|
||||||
|
|
||||||
BuildRequires: chrpath
|
BuildRequires: chrpath
|
||||||
BuildRequires: pango-devel
|
BuildRequires: pango-devel
|
||||||
@ -106,6 +108,7 @@ the functionality of the installed %{name} package.
|
|||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
%patch0 -p1
|
%patch0 -p1
|
||||||
|
%patch1 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
autoreconf -f -i
|
autoreconf -f -i
|
||||||
@ -180,6 +183,9 @@ glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || :
|
|||||||
%{_datadir}/mutter/tests
|
%{_datadir}/mutter/tests
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Sep 08 2016 Kalev Lember <klember@redhat.com> - 3.21.91-2
|
||||||
|
- wayland/cursor-role: Increase buffer use count on construction (#1373372)
|
||||||
|
|
||||||
* Tue Aug 30 2016 Florian Müllner <fmuellner@redhat.com> - 3.21.91-1
|
* Tue Aug 30 2016 Florian Müllner <fmuellner@redhat.com> - 3.21.91-1
|
||||||
- Update to 3.21.91
|
- Update to 3.21.91
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user