* Tue Oct 5 2010 Owen Taylor <otaylor@redhat.com> - 1.4.0-3

- Add a patch cherry-picked from upstream for
  http://bugzilla.clutter-project.org/show_bug.cgi?id=2324
  (gnome-shell crashes on root background changes)
This commit is contained in:
Owen W. Taylor 2010-10-05 09:28:45 -04:00
parent 8f6362c6dd
commit 51e81f5865
2 changed files with 79 additions and 1 deletions

View File

@ -1,6 +1,6 @@
Name: clutter
Version: 1.4.0
Release: 2%{?dist}
Release: 3%{?dist}
Summary: Open Source software library for creating rich graphical user interfaces
Group: Development/Libraries
@ -11,6 +11,8 @@ Source0: http://www.clutter-project.org/sources/%{name}/1.4/%{name}-%{ver
# http://bugzilla.openedhand.com/show_bug.cgi?id=2100
Patch0: Use-a-native-format-for-atlas-textures.patch
# http://bugzilla.clutter-project.org/show_bug.cgi?id=2324
Patch1: cogl-x11-Trap-glXDestroyPixmap.patch
BuildRequires: glib2-devel mesa-libGL-devel gtk2-devel pkgconfig pango-devel
BuildRequires: gobject-introspection-devel >= 0.9.6
@ -57,6 +59,7 @@ This package contains documentation for clutter.
%setup -q
%patch0 -p0 -b .atlas-textures
%patch1 -p1 -b .glXDestroyPixmap
%build
(if ! test -x configure; then NOCONFIGURE=1 ./autogen.sh; CONFIGFLAGS=--enable-gtk-doc; fi;
@ -109,6 +112,11 @@ rm -rf %{buildroot}
%{_datadir}/gtk-doc/html/cally
%changelog
* Tue Oct 5 2010 Owen Taylor <otaylor@redhat.com> - 1.4.0-3
- Add a patch cherry-picked from upstream for
http://bugzilla.clutter-project.org/show_bug.cgi?id=2324
(gnome-shell crashes on root background changes)
* Wed Sep 29 2010 jkeating - 1.4.0-2
- Rebuilt for gcc bug 634757

View File

@ -0,0 +1,70 @@
From 6af0ee2cbe2d6584b523809f160f56daf16eb583 Mon Sep 17 00:00:00 2001
From: Emmanuele Bassi <ebassi@linux.intel.com>
Date: Mon, 4 Oct 2010 14:12:21 +0100
Subject: [PATCH] cogl-x11: Trap glXDestroyPixmap()
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
There are ordering issues in the pixmap destruction with current and
past X11 server, Mesa and dri2. Under some circumstances, an X pixmap
might be destroyed with the GLX pixmap still referencing it, and thus
the X server will decide to destroy the GLX pixmap as well; then, when
Cogl tries to destroy the GLX pixmap, it gets BadDrawable errors.
Clutter 1.2 used to trap + sync all calls to glXDestroyPixmap(), but
then we assumed that the ordering issue had been solved. So, we're back
to square 1.
I left a Big Fat Comment™ right above the glXDestroyPixmap() call
referencing the bug and the reasoning behind the trap, so that we don't
go and remove it in the future without checking that the issue has been
in fact solved.
http://bugzilla.clutter-project.org/show_bug.cgi?id=2324
---
clutter/cogl/cogl/winsys/cogl-texture-pixmap-x11.c | 22 ++++++++++++++++++++
1 files changed, 22 insertions(+), 0 deletions(-)
diff --git a/clutter/cogl/cogl/winsys/cogl-texture-pixmap-x11.c b/clutter/cogl/cogl/winsys/cogl-texture-pixmap-x11.c
index 56097ea..be0c302 100644
--- a/clutter/cogl/cogl/winsys/cogl-texture-pixmap-x11.c
+++ b/clutter/cogl/cogl/winsys/cogl-texture-pixmap-x11.c
@@ -888,12 +888,34 @@ _cogl_texture_pixmap_x11_free_glx_pixmap (CoglTexturePixmapX11 *tex_pixmap)
{
if (tex_pixmap->glx_pixmap)
{
+ CoglXlibTrapState trap_state;
+
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
if (tex_pixmap->pixmap_bound)
glXReleaseTexImage (_cogl_xlib_get_display (), tex_pixmap->glx_pixmap,
GLX_FRONT_LEFT_EXT);
+
+ /* FIXME - we need to trap errors and synchronize here because
+ * of ordering issues between the XPixmap destruction and the
+ * GLXPixmap destruction.
+ *
+ * If the X pixmap is destroyed, the GLX pixmap is destroyed as
+ * well immediately, and thus, when Cogl calls glXDestroyPixmap()
+ * it'll cause a BadDrawable error.
+ *
+ * this is technically a bug in the X server, which should not
+ * destroy either pixmaps until the call to glXDestroyPixmap(); so
+ * at some point we should revisit this code and remove the
+ * trap+sync after verifying that the destruction is indeed safe.
+ *
+ * for reference, see:
+ * http://bugzilla.clutter-project.org/show_bug.cgi?id=2324
+ */
+ _cogl_xlib_trap_errors (&trap_state);
glXDestroyPixmap (_cogl_xlib_get_display (), tex_pixmap->glx_pixmap);
+ XSync (_cogl_xlib_get_display (), False);
+ _cogl_xlib_untrap_errors (&trap_state);
tex_pixmap->glx_pixmap = None;
tex_pixmap->pixmap_bound = FALSE;
--
1.7.3.1