- Update to 0.10.29
This commit is contained in:
parent
bc42fe160f
commit
9e7ffe464b
@ -1 +1 @@
|
|||||||
gstreamer-0.10.28.tar.bz2
|
gstreamer-0.10.29.tar.bz2
|
||||||
|
@ -1,64 +0,0 @@
|
|||||||
From 8fe63000de31bb2bcf346d59230dea06117997cd Mon Sep 17 00:00:00 2001
|
|
||||||
From: Benjamin Otte <otte@redhat.com>
|
|
||||||
Date: Fri, 12 Mar 2010 16:42:47 +0100
|
|
||||||
Subject: [PATCH] plugins: Do not ever unload a plugin after calling into it
|
|
||||||
|
|
||||||
This is what can happen in a plugin_init function:
|
|
||||||
- An element based on GstBaseSink is registered
|
|
||||||
- Other elements fail to register
|
|
||||||
- The plugin_init function returns FALSE
|
|
||||||
|
|
||||||
Now if this the plugin is the first plugin to link against
|
|
||||||
libgstbase.so, it will have caused libgstbase.so to be loaded and static
|
|
||||||
strings from that library will have been added to gobject while
|
|
||||||
registering GstBaseSink.
|
|
||||||
|
|
||||||
So unloading the plugin will cause those strings to go stale and the
|
|
||||||
next plugin using GstBaseSink will crash. So we must not unload modules
|
|
||||||
after calling into them ever.
|
|
||||||
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=572800
|
|
||||||
---
|
|
||||||
gst/gstplugin.c | 9 ++++++---
|
|
||||||
1 files changed, 6 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/gst/gstplugin.c b/gst/gstplugin.c
|
|
||||||
index 0f146ae..af62434 100644
|
|
||||||
--- a/gst/gstplugin.c
|
|
||||||
+++ b/gst/gstplugin.c
|
|
||||||
@@ -412,18 +412,22 @@ gst_plugin_register_func (GstPlugin * plugin, const GstPluginDesc * desc,
|
|
||||||
|
|
||||||
gst_plugin_desc_copy (&plugin->desc, desc);
|
|
||||||
|
|
||||||
+ /* make resident so we're really sure it never gets unloaded again.
|
|
||||||
+ * Theoretically this is not needed, but practically it doesn't hurt.
|
|
||||||
+ * And we're rather safe than sorry. */
|
|
||||||
+ if (plugin->module)
|
|
||||||
+ g_module_make_resident (plugin->module);
|
|
||||||
+
|
|
||||||
if (user_data) {
|
|
||||||
if (!(((GstPluginInitFullFunc) (desc->plugin_init)) (plugin, user_data))) {
|
|
||||||
if (GST_CAT_DEFAULT)
|
|
||||||
GST_WARNING ("plugin \"%s\" failed to initialise", plugin->filename);
|
|
||||||
- plugin->module = NULL;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (!((desc->plugin_init) (plugin))) {
|
|
||||||
if (GST_CAT_DEFAULT)
|
|
||||||
GST_WARNING ("plugin \"%s\" failed to initialise", plugin->filename);
|
|
||||||
- plugin->module = NULL;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -646,7 +650,6 @@ gst_plugin_load_file (const gchar * filename, GError ** error)
|
|
||||||
GST_PLUGIN_ERROR_MODULE,
|
|
||||||
"File \"%s\" appears to be a GStreamer plugin, but it failed to initialize",
|
|
||||||
filename);
|
|
||||||
- g_module_close (module);
|
|
||||||
goto return_error;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
1.6.6.1
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
|||||||
%define _libxml2 2.4.0
|
%define _libxml2 2.4.0
|
||||||
|
|
||||||
Name: %{gstreamer}
|
Name: %{gstreamer}
|
||||||
Version: 0.10.28
|
Version: 0.10.29
|
||||||
Release: 2%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: GStreamer streaming media framework runtime
|
Summary: GStreamer streaming media framework runtime
|
||||||
|
|
||||||
Group: Applications/Multimedia
|
Group: Applications/Multimedia
|
||||||
@ -34,7 +34,6 @@ BuildRequires: gcc-c++
|
|||||||
|
|
||||||
# For the GStreamer RPM provides
|
# For the GStreamer RPM provides
|
||||||
Patch1: gstreamer-inspect-rpm-format.patch
|
Patch1: gstreamer-inspect-rpm-format.patch
|
||||||
Patch2: 0001-plugins-Do-not-ever-unload-a-plugin-after-calling-in.patch
|
|
||||||
Source1: gstreamer.prov
|
Source1: gstreamer.prov
|
||||||
Source2: macros.gstreamer
|
Source2: macros.gstreamer
|
||||||
|
|
||||||
@ -103,7 +102,6 @@ with different major/minor versions of GStreamer.
|
|||||||
%setup -q -n gstreamer-%{version}
|
%setup -q -n gstreamer-%{version}
|
||||||
|
|
||||||
%patch1 -p1 -b .rpm-provides
|
%patch1 -p1 -b .rpm-provides
|
||||||
%patch2 -p1 -b .no-unload
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
# 0.10.0: manuals do not build due to an openjade error; disable for now
|
# 0.10.0: manuals do not build due to an openjade error; disable for now
|
||||||
@ -214,6 +212,9 @@ rm -rf $RPM_BUILD_ROOT
|
|||||||
%{_sysconfdir}/rpm/macros.gstreamer
|
%{_sysconfdir}/rpm/macros.gstreamer
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Apr 30 2010 Benjamin Otte <otte@redhat.com> 0.10.29-1
|
||||||
|
- Update to 0.10.29
|
||||||
|
|
||||||
* Mon Mar 15 2010 Benjamin Otte <otte@redhat.com> 0.10.28-2
|
* Mon Mar 15 2010 Benjamin Otte <otte@redhat.com> 0.10.28-2
|
||||||
- Fix crashes when plugin init fails (#572800)
|
- Fix crashes when plugin init fails (#572800)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user