Date: Sunday, August 16, 2015 @ 19:39:48 Author: bgyorgy Revision: 138426
upgpkg: metacity 3.16.1-2 Fix crasher Added: metacity/trunk/fix-crasher.patch Modified: metacity/trunk/PKGBUILD -------------------+ PKGBUILD | 15 ++++++- fix-crasher.patch | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+), 3 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2015-08-16 16:47:17 UTC (rev 138425) +++ PKGBUILD 2015-08-16 17:39:48 UTC (rev 138426) @@ -4,7 +4,7 @@ pkgname=metacity pkgver=3.16.1 -pkgrel=1 +pkgrel=2 pkgdesc="Legacy GNOME window manager" arch=('i686' 'x86_64') license=('GPL') @@ -12,9 +12,18 @@ makedepends=('intltool' 'itstool') url="https://wiki.gnome.org/Projects/Metacity" install=metacity.install -source=(http://ftp.gnome.org/pub/gnome/sources/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.xz) -sha256sums=('7a2e4ab7e19bfa5e6fc75d80d66e79f7965b5a51435c9675b0e895179d256f86') +source=(http://ftp.gnome.org/pub/gnome/sources/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.xz + fix-crasher.patch) +sha256sums=('7a2e4ab7e19bfa5e6fc75d80d66e79f7965b5a51435c9675b0e895179d256f86' + 'eb2a6043ff1a2fc0207a65c2bee18ada509108354379ddc12ef04566cfd7a524') +prepare() { + cd $pkgname-$pkgver + + # Fix crasher + patch -Np1 -i ../fix-crasher.patch +} + build() { cd $pkgname-$pkgver ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --libexecdir=/usr/lib/$pkgname \ Added: fix-crasher.patch =================================================================== --- fix-crasher.patch (rev 0) +++ fix-crasher.patch 2015-08-16 17:39:48 UTC (rev 138426) @@ -0,0 +1,103 @@ +From a9f28dbc26f5211ef08889109db3dc8c7ba76aca Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Alberts=20Muktup=C4=81vels?= <alberts.muktupav...@gmail.com> +Date: Tue, 7 Jul 2015 13:49:30 +0300 +Subject: compositor: fix possible crash closing/destroying window + +Partially restore call to destroy_win in compositor when calling +meta_window_free. This is needed to ensure that we never call +meta_window_get_frame_bounds while windows is destroying. + +https://bugzilla.gnome.org/show_bug.cgi?id=751833 + +diff --git a/src/compositor/compositor-private.h b/src/compositor/compositor-private.h +index 11ed73b..a45fdc9 100644 +--- a/src/compositor/compositor-private.h ++++ b/src/compositor/compositor-private.h +@@ -48,6 +48,9 @@ struct _MetaCompositor + MetaScreen *screen, + MetaWindow *window); + ++ void (*free_window) (MetaCompositor *compositor, ++ MetaWindow *window); ++ + void (*maximize_window) (MetaCompositor *compositor, + MetaWindow *window); + void (*unmaximize_window) (MetaCompositor *compositor, +diff --git a/src/compositor/compositor-xrender.c b/src/compositor/compositor-xrender.c +index 3bff70a..fbae9a7 100644 +--- a/src/compositor/compositor-xrender.c ++++ b/src/compositor/compositor-xrender.c +@@ -2799,23 +2799,38 @@ xrender_end_move (MetaCompositor *compositor, + #ifdef HAVE_COMPOSITE_EXTENSIONS + #endif + } ++#endif /* 0 */ + + static void + xrender_free_window (MetaCompositor *compositor, + MetaWindow *window) + { + #ifdef HAVE_COMPOSITE_EXTENSIONS +- /* FIXME: When an undecorated window is hidden this is called, +- but the window does not get readded if it is subsequentally shown again +- See http://bugzilla.gnome.org/show_bug.cgi?id=504876 +- +- I don't *think* theres any need for this call anyway, leaving it out +- does not seem to cause any side effects so far, but I should check with +- someone who understands more. */ +- /* destroy_win (compositor->display, window->xwindow, FALSE); */ ++ MetaCompositorXRender *xrc; ++ MetaFrame *frame; ++ Window xwindow; ++ ++ xrc = (MetaCompositorXRender *) compositor; ++ frame = meta_window_get_frame (window); ++ xwindow = None; ++ ++ if (frame) ++ { ++ xwindow = meta_frame_get_xwindow (frame); ++ } ++ else ++ { ++ /* FIXME: When an undecorated window is hidden this is called, but the ++ * window does not get readded if it is subsequentally shown again. See: ++ * http://bugzilla.gnome.org/show_bug.cgi?id=504876 ++ */ ++ /* xwindow = meta_window_get_xwindow (window); */ ++ } ++ ++ if (xwindow != None) ++ destroy_win (xrc->display, xwindow, FALSE); + #endif + } +-#endif /* 0 */ + + static void + xrender_process_event (MetaCompositor *compositor, +@@ -3095,6 +3110,7 @@ static MetaCompositor comp_info = { + xrender_process_event, + xrender_get_window_pixmap, + xrender_set_active_window, ++ xrender_free_window, + xrender_maximize_window, + xrender_unmaximize_window, + }; +diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c +index 0dcf2b2..1fea362 100644 +--- a/src/compositor/compositor.c ++++ b/src/compositor/compositor.c +@@ -154,6 +154,10 @@ void meta_compositor_end_move (MetaCompositor *compositor, + void meta_compositor_free_window (MetaCompositor *compositor, + MetaWindow *window) + { ++#ifdef HAVE_COMPOSITE_EXTENSIONS ++ if (compositor && compositor->free_window) ++ compositor->free_window (compositor, window); ++#endif + } + + void +-- +cgit v0.10.2 +