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 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)); } /**