]> code.ossystems Code Review - openembedded-core.git/commitdiff
libowl-av: Fix music player crash if adding unknown type files
authorDongxiao Xu <dongxiao.xu@intel.com>
Wed, 13 Oct 2010 02:08:44 +0000 (10:08 +0800)
committerSaul Wold <Saul.Wold@intel.com>
Wed, 13 Oct 2010 18:29:13 +0000 (11:29 -0700)
Using bus message to call function flush_head/feed_head in main thread
to protect private data operation.

A better fix may be to listen to bus message "CODEC_NOT_FOUND" and
"MISSING_PLUGIN" directly to avoid hooking into "unknown-type" signal.
We will revisit it in next period.

This fixes [BUGID #296]

Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
meta/recipes-sato/owl-video-widget/libowl-av/gst_change_state.patch [new file with mode: 0644]
meta/recipes-sato/owl-video-widget/libowl-av_svn.bb

diff --git a/meta/recipes-sato/owl-video-widget/libowl-av/gst_change_state.patch b/meta/recipes-sato/owl-video-widget/libowl-av/gst_change_state.patch
new file mode 100644 (file)
index 0000000..cc09587
--- /dev/null
@@ -0,0 +1,40 @@
+Fix music player crash if adding unknown type files.
+
+Using bus message to call function flush_head/feed_head in main thread
+to protect private data operation.
+
+A better fix may be to listen to bus message "CODEC_NOT_FOUND" and
+"MISSING_PLUGIN" directly to avoid hooking into "unknown-type" signal.
+We will revisit it in next period.
+
+Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
+
+diff -ruN libowl-av-orig/libowl-av/owl-tag-reader.c libowl-av/libowl-av/owl-tag-reader.c
+--- libowl-av-orig/libowl-av/owl-tag-reader.c  2010-10-12 14:30:26.000000000 +0800
++++ libowl-av/libowl-av/owl-tag-reader.c       2010-10-12 14:32:39.000000000 +0800
+@@ -300,13 +300,23 @@
+                            GstCaps      *caps,
+                            OwlTagReader *tag_reader)
+ {
++        GstMessage *message;
++        GstBus *bus;
++
+         tag_reader->priv->current_error =
+                 g_error_new (OWL_TAG_READER_ERROR,
+                              OWL_TAG_READER_ERROR_UNKNOWN_TYPE,
+                              "Unknown type");
+-        flush_head (tag_reader);
+-        feed_head (tag_reader);
++        /**
++         * Post a message to the bus, as we are in another thread here.
++         **/
++        message = gst_message_new_error(GST_OBJECT (decodebin),
++                                        tag_reader->priv->current_error, NULL);
++
++        bus = gst_pipeline_get_bus (GST_PIPELINE (tag_reader->priv->pipeline));
++        gst_bus_post (bus, message);
++        gst_object_unref (GST_OBJECT (bus));
+ }
+ /**
index be3469965a3887ca3dbde6aa0298099aae535316..e00d3b6d9a53ced73556aa8f8636f0533f43edc4 100644 (file)
@@ -13,10 +13,11 @@ RDEPENDS = "gst-meta-base"
 RRECOMMENDS = "gst-meta-audio gst-meta-video"
 
 PV = "0.0+svnr${SRCREV}"
-PR = "r3"
+PR = "r4"
 
 S = "${WORKDIR}/${PN}"
 
-SRC_URI = "svn://svn.o-hand.com/repos/misc/trunk;module=${PN};proto=http"
+SRC_URI = "svn://svn.o-hand.com/repos/misc/trunk;module=${PN};proto=http \
+           file://gst_change_state.patch"
 
 inherit autotools pkgconfig