[clutter] * Tue Oct 5 2010 Owen Taylor <otaylor at redhat.com> - 1.4.0-3 - Add a patch cherry-picked from upstre

Owen Taylor otaylor at fedoraproject.org
Tue Oct 5 13:29:22 UTC 2010


commit 51e81f586505b00345541ecc7b9adab606cad3fd
Author: Owen W. Taylor <otaylor at fishsoup.net>
Date:   Tue Oct 5 09:28:45 2010 -0400

    * Tue Oct  5 2010 Owen Taylor <otaylor at 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)

 clutter.spec                         |   10 ++++-
 cogl-x11-Trap-glXDestroyPixmap.patch |   70 ++++++++++++++++++++++++++++++++++
 2 files changed, 79 insertions(+), 1 deletions(-)
---
diff --git a/clutter.spec b/clutter.spec
index 5a7b9be..22e48cf 100644
--- a/clutter.spec
+++ b/clutter.spec
@@ -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 at 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
 
diff --git a/cogl-x11-Trap-glXDestroyPixmap.patch b/cogl-x11-Trap-glXDestroyPixmap.patch
new file mode 100644
index 0000000..aea6113
--- /dev/null
+++ b/cogl-x11-Trap-glXDestroyPixmap.patch
@@ -0,0 +1,70 @@
+From 6af0ee2cbe2d6584b523809f160f56daf16eb583 Mon Sep 17 00:00:00 2001
+From: Emmanuele Bassi <ebassi at 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
+


More information about the scm-commits mailing list