--- a/libpurple/mediamanager.c Fri Jun 10 16:47:02 2016 +0200
+++ b/libpurple/mediamanager.c Fri Jun 10 18:22:28 2016 +0200
@@ -562,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);
@@ -871,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);
@@ -1029,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);