summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Alfredsen <loki_val@gentoo.org>2009-01-09 12:54:19 +0000
committerPeter Alfredsen <loki_val@gentoo.org>2009-01-09 12:54:19 +0000
commit308c8b5ff3f67a7ad387daebb1e9e1bff9913206 (patch)
tree1169a485e1b806dfd907bb17fb0ef982e9f84335 /media-libs/gstreamer
parentversion bump (diff)
downloadgentoo-2-308c8b5ff3f67a7ad387daebb1e9e1bff9913206.tar.gz
gentoo-2-308c8b5ff3f67a7ad387daebb1e9e1bff9913206.tar.bz2
gentoo-2-308c8b5ff3f67a7ad387daebb1e9e1bff9913206.zip
Fix bug 250704, upstream bug 555631, Banshee crashing or doing a tail-spin with gstreamer. Bump masked version to -r10, the new 'ordinary' version is -r3.
(Portage version: 2.2_rc20/cvs/Linux 2.6.28 x86_64)
Diffstat (limited to 'media-libs/gstreamer')
-rw-r--r--media-libs/gstreamer/ChangeLog15
-rw-r--r--media-libs/gstreamer/files/gstreamer-0.10.21-b.g.o-555631.patch100
-rw-r--r--media-libs/gstreamer/gstreamer-0.10.21-r10.ebuild (renamed from media-libs/gstreamer/gstreamer-0.10.21-r2.ebuild)7
-rw-r--r--media-libs/gstreamer/gstreamer-0.10.21-r3.ebuild (renamed from media-libs/gstreamer/gstreamer-0.10.21-r1.ebuild)7
4 files changed, 121 insertions, 8 deletions
diff --git a/media-libs/gstreamer/ChangeLog b/media-libs/gstreamer/ChangeLog
index c1c8a9980e8b..319397a376b2 100644
--- a/media-libs/gstreamer/ChangeLog
+++ b/media-libs/gstreamer/ChangeLog
@@ -1,6 +1,17 @@
# ChangeLog for media-libs/gstreamer
-# Copyright 2002-2008 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/media-libs/gstreamer/ChangeLog,v 1.215 2008/12/24 13:39:17 ssuominen Exp $
+# Copyright 2002-2009 Gentoo Foundation; Distributed under the GPL v2
+# $Header: /var/cvsroot/gentoo-x86/media-libs/gstreamer/ChangeLog,v 1.216 2009/01/09 12:54:19 loki_val Exp $
+
+*gstreamer-0.10.21-r10 (09 Jan 2009)
+*gstreamer-0.10.21-r3 (09 Jan 2009)
+
+ 09 Jan 2009; Peter Alfredsen <loki_val@gentoo.org>
+ +files/gstreamer-0.10.21-b.g.o-555631.patch, -gstreamer-0.10.21-r1.ebuild,
+ -gstreamer-0.10.21-r2.ebuild, +gstreamer-0.10.21-r3.ebuild,
+ +gstreamer-0.10.21-r10.ebuild:
+ Fix bug 250704, upstream bug 555631, Banshee crashing or doing a tail-spin
+ with gstreamer. Bump masked version to -r10, the new 'ordinary' version is
+ -r3.
*gstreamer-0.10.21-r2 (24 Dec 2008)
diff --git a/media-libs/gstreamer/files/gstreamer-0.10.21-b.g.o-555631.patch b/media-libs/gstreamer/files/gstreamer-0.10.21-b.g.o-555631.patch
new file mode 100644
index 000000000000..922d8beb3cfa
--- /dev/null
+++ b/media-libs/gstreamer/files/gstreamer-0.10.21-b.g.o-555631.patch
@@ -0,0 +1,100 @@
+
+* libs/gst/base/gstbasetransform.c:
+(gst_base_transform_prepare_output_buffer),
+(gst_base_transform_buffer_alloc), (gst_base_transform_suggest):
+Protect sink_alloc caps with the sinkpad lock to avoid nasty caps
+refcount problems as seen in banshee and maybe also in farsight2.
+Remove atomic int now that we need to take the lock anyways.
+
+http://bugzilla.gnome.org/show_bug.cgi?id=555631
+http://bugs.gentoo.org/show_bug.cgi?id=250704
+http://webcvs.freedesktop.org/gstreamer/gstreamer/libs/gst/base/gstbasetransform.c?r1=1.126&r2=1.127
+
+--- gstreamer/libs/gst/base/gstbasetransform.c 2008/10/20 13:29:06 1.126
++++ gstreamer/libs/gst/base/gstbasetransform.c 2008/10/21 16:30:41 1.127
+@@ -251,7 +251,7 @@
+ /* upstream caps and size suggestions */
+ GstCaps *sink_suggest;
+ guint size_suggest;
+- gint suggest_pending;
++ gboolean suggest_pending;
+
+ gboolean reconfigure;
+ };
+@@ -1224,7 +1224,7 @@
+ gst_caps_unref (priv->sink_suggest);
+ priv->sink_suggest = gst_caps_ref (othercaps);
+ priv->size_suggest = size_suggest;
+- g_atomic_int_set (&trans->priv->suggest_pending, 1);
++ trans->priv->suggest_pending = TRUE;
+ GST_OBJECT_UNLOCK (trans->sinkpad);
+ }
+ gst_caps_unref (othercaps);
+@@ -1366,7 +1366,7 @@
+ GstBaseTransform *trans;
+ GstBaseTransformPrivate *priv;
+ GstFlowReturn res;
+- gboolean proxy, suggest;
++ gboolean proxy, suggest, same_caps;
+ GstCaps *sink_suggest;
+ guint size_suggest;
+
+@@ -1384,8 +1384,12 @@
+
+ /* we remember our previous alloc request to quickly see if we can proxy or
+ * not. We skip this check if we have a pending suggestion. */
+- if (g_atomic_int_get (&priv->suggest_pending) == 0 && caps &&
+- gst_caps_is_equal (priv->sink_alloc, caps)) {
++ GST_OBJECT_LOCK (pad);
++ same_caps = !priv->suggest_pending && caps &&
++ gst_caps_is_equal (priv->sink_alloc, caps);
++ GST_OBJECT_UNLOCK (pad);
++
++ if (same_caps) {
+ /* we have seen this before, see below if we need to proxy */
+ GST_DEBUG_OBJECT (trans, "have old caps");
+ sink_suggest = caps;
+@@ -1414,7 +1418,7 @@
+ size_suggest = size;
+ suggest = FALSE;
+ }
+- g_atomic_int_set (&priv->suggest_pending, 0);
++ priv->suggest_pending = FALSE;
+ GST_OBJECT_UNLOCK (pad);
+
+ /* check if we actually handle this format on the sinkpad */
+@@ -1462,7 +1466,10 @@
+ }
+ }
+ /* remember the new caps */
++ GST_OBJECT_LOCK (pad);
+ gst_caps_replace (&priv->sink_alloc, sink_suggest);
++ GST_OBJECT_UNLOCK (pad);
++
+ proxy = priv->proxy_alloc;
+ GST_DEBUG_OBJECT (trans, "doing default alloc, proxy %d", proxy);
+
+@@ -1487,11 +1494,13 @@
+ if (!gst_caps_is_equal (newcaps, caps)) {
+ GST_DEBUG_OBJECT (trans, "caps are new");
+ /* we have new caps, see if we can proxy downstream */
+- if (gst_pad_peer_accept_caps (trans->sinkpad, newcaps)) {
++ if (gst_pad_peer_accept_caps (pad, newcaps)) {
+ /* peer accepts the caps, return a buffer in this format */
+ GST_DEBUG_OBJECT (trans, "peer accepted new caps");
+ /* remember the format */
++ GST_OBJECT_LOCK (pad);
+ gst_caps_replace (&priv->sink_alloc, newcaps);
++ GST_OBJECT_UNLOCK (pad);
+ } else {
+ GST_DEBUG_OBJECT (trans, "peer did not accept new caps");
+ /* peer does not accept the caps, free the buffer we received and
+@@ -2306,7 +2315,7 @@
+ caps = gst_caps_copy (caps);
+ trans->priv->sink_suggest = caps;
+ trans->priv->size_suggest = size;
+- g_atomic_int_set (&trans->priv->suggest_pending, 1);
++ trans->priv->suggest_pending = TRUE;
+ GST_DEBUG_OBJECT (trans, "new suggest %" GST_PTR_FORMAT, caps);
+ GST_OBJECT_UNLOCK (trans->sinkpad);
+ }
diff --git a/media-libs/gstreamer/gstreamer-0.10.21-r2.ebuild b/media-libs/gstreamer/gstreamer-0.10.21-r10.ebuild
index 754a34e24385..e8b6723a4895 100644
--- a/media-libs/gstreamer/gstreamer-0.10.21-r2.ebuild
+++ b/media-libs/gstreamer/gstreamer-0.10.21-r10.ebuild
@@ -1,6 +1,6 @@
-# Copyright 1999-2008 Gentoo Foundation
+# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/media-libs/gstreamer/gstreamer-0.10.21-r2.ebuild,v 1.3 2008/12/31 03:30:47 mr_bones_ Exp $
+# $Header: /var/cvsroot/gentoo-x86/media-libs/gstreamer/gstreamer-0.10.21-r10.ebuild,v 1.1 2009/01/09 12:54:19 loki_val Exp $
EAPI=2
@@ -30,7 +30,8 @@ src_prepare() {
# Needed for sane .so versioning on Gentoo/FreeBSD
#elibtoolize
epatch "${FILESDIR}"/${P}-gtkdoc.patch \
- "${FILESDIR}"/${P}-bison241.patch
+ "${FILESDIR}"/${P}-bison241.patch \
+ "${FILESDIR}"/${P}-b.g.o-555631.patch
AT_M4DIR="common/m4" eautoreconf
}
diff --git a/media-libs/gstreamer/gstreamer-0.10.21-r1.ebuild b/media-libs/gstreamer/gstreamer-0.10.21-r3.ebuild
index a5657c7226ec..7908f18dce18 100644
--- a/media-libs/gstreamer/gstreamer-0.10.21-r1.ebuild
+++ b/media-libs/gstreamer/gstreamer-0.10.21-r3.ebuild
@@ -1,6 +1,6 @@
-# Copyright 1999-2008 Gentoo Foundation
+# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/media-libs/gstreamer/gstreamer-0.10.21-r1.ebuild,v 1.3 2008/12/31 03:30:47 mr_bones_ Exp $
+# $Header: /var/cvsroot/gentoo-x86/media-libs/gstreamer/gstreamer-0.10.21-r3.ebuild,v 1.1 2009/01/09 12:54:19 loki_val Exp $
EAPI=2
@@ -30,7 +30,8 @@ src_prepare() {
# Needed for sane .so versioning on Gentoo/FreeBSD
#elibtoolize
epatch "${FILESDIR}"/${P}-gtkdoc.patch \
- "${FILESDIR}"/${P}-bison241.patch
+ "${FILESDIR}"/${P}-bison241.patch \
+ "${FILESDIR}"/${P}-b.g.o-555631.patch
AT_M4DIR="common/m4" eautoreconf
}