--- a/libpurple/media/backend-fs2.c Sat Jun 18 20:42:01 2016 -0500
+++ b/libpurple/media/backend-fs2.c Sat Jun 18 21:11:40 2016 -0500
@@ -533,6 +533,8 @@
purple_media_backend_fs2_class_init(PurpleMediaBackendFs2Class *klass)
GObjectClass *gobject_class = (GObjectClass*)klass;
gobject_class->dispose = purple_media_backend_fs2_dispose;
gobject_class->finalize = purple_media_backend_fs2_finalize;
@@ -544,6 +546,15 @@
g_object_class_override_property(gobject_class, PROP_MEDIA, "media");
g_type_class_add_private(klass, sizeof(PurpleMediaBackendFs2Private));
+ /* VA-API elements aren't well supported in Farstream. Ignore them. */ + features = gst_registry_get_feature_list_by_plugin(gst_registry_get(), + for (it = features; it; it = it->next) { + gst_plugin_feature_set_rank((GstPluginFeature *)it->data, + gst_plugin_feature_list_free(features); --- a/libpurple/mediamanager.c Sat Jun 18 20:42:01 2016 -0500
+++ b/libpurple/mediamanager.c Sat Jun 18 21:11:40 2016 -0500
@@ -491,14 +491,18 @@
#ifdef HAVE_MEDIA_APPLICATION
g_mutex_lock (&manager->priv->appdata_mutex);
- for (list = manager->priv->appdata_info; list; list = list->next) {
+ list = manager->priv->appdata_info; PurpleMediaAppDataInfo *info = list->data;
+ GList *next = list->next; if (info->media == media) {
manager->priv->appdata_info = g_list_delete_link (
manager->priv->appdata_info, list);
free_appdata_info_locked (info);
g_mutex_unlock (&manager->priv->appdata_mutex);
@@ -558,9 +562,24 @@
free_appdata_info_locked (PurpleMediaAppDataInfo *info)
+ GstAppSrcCallbacks null_src_cb = { NULL, NULL, NULL, { NULL } }; + GstAppSinkCallbacks null_sink_cb = { NULL, NULL, NULL , { NULL } }; info->notify (info->user_data);
+ /* Will call appsrc_destroyed. */ + gst_app_src_set_callbacks (info->appsrc, &null_src_cb, + /* Will call appsink_destroyed. */ + gst_app_sink_set_callbacks (info->appsink, &null_sink_cb, /* Make sure no other thread is using the structure */
g_free (info->session_id);
g_free (info->participant);
@@ -867,7 +886,14 @@
appsrc_destroyed (PurpleMediaAppDataInfo *info)
- PurpleMediaManager *manager = purple_media_manager_get ();
+ PurpleMediaManager *manager; + /* PurpleMediaAppDataInfo is being freed. Return at once. */ + manager = purple_media_manager_get (); g_mutex_lock (&manager->priv->appdata_mutex);
@@ -1025,7 +1051,14 @@
appsink_destroyed (PurpleMediaAppDataInfo *info)
- PurpleMediaManager *manager = purple_media_manager_get ();
+ PurpleMediaManager *manager; + /* PurpleMediaAppDataInfo is being freed. Return at once. */ + manager = purple_media_manager_get (); g_mutex_lock (&manager->priv->appdata_mutex);
--- a/pidgin/gtkft.c Sat Jun 18 20:42:01 2016 -0500
+++ b/pidgin/gtkft.c Sat Jun 18 21:11:40 2016 -0500
@@ -504,7 +504,9 @@
- purple_notify_uri(NULL, filename);
+ gchar *uri = g_strdup_printf("file://%s", filename); + purple_notify_uri(NULL, uri);