[telepathy-stream-engine/refs/tags/telepathy-stream-engine_0.5.10] Save threads when entering them

Olivier Crête olivier.crete at collabora.co.uk
Mon Oct 26 09:28:22 PDT 2009


---
 src/tp-stream-engine.c |   23 +++++++++++++++++++++++
 1 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/src/tp-stream-engine.c b/src/tp-stream-engine.c
index f33ce80..69ff796 100644
--- a/src/tp-stream-engine.c
+++ b/src/tp-stream-engine.c
@@ -26,6 +26,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <pthread.h>
 
 #include <telepathy-glib/dbus.h>
 #include <telepathy-glib/errors.h>
@@ -153,6 +154,11 @@ struct _TpStreamEnginePrivate
   TpStreamEngineVideoPreview *preview;
 
   guint bus_async_source_id;
+
+  GPtrArray *audio_elements;
+  GPtrArray *audio_pads;
+
+  GHashTable *object_threads;
 };
 
 static void
@@ -229,6 +235,10 @@ tp_stream_engine_init (TpStreamEngine *self)
   priv->channels_by_path = g_hash_table_new_full (g_str_hash, g_str_equal,
       g_free, NULL);
 
+  priv->audio_pads = g_ptr_array_new ();
+  priv->audio_elements = g_ptr_array_new ();
+  priv->object_threads = g_hash_table_new (g_direct_hash, g_direct_equal);
+
   priv->mutex = g_mutex_new ();
 
   priv->notifier = fs_element_added_notifier_new ();
@@ -411,6 +421,10 @@ tp_stream_engine_finalize (GObject *object)
 
   g_mutex_free (self->priv->mutex);
 
+  g_ptr_array_free (self->priv->audio_elements, TRUE);
+  g_ptr_array_free (self->priv->audio_pads, TRUE);
+  g_hash_table_destroy (self->priv->object_threads);
+
   G_OBJECT_CLASS (tp_stream_engine_parent_class)->finalize (object);
 }
 
@@ -970,11 +984,20 @@ bus_async_handler (GstBus *bus G_GNUC_UNUSED,
 static void
 enter_thread (TpStreamEngine *self, GstObject *src, GstElement *owner)
 {
+  pthread_t selfthread = pthread_self ();
+
+  g_mutex_lock (self->priv->mutex);
+  g_hash_table_insert (self->priv->object_threads, src,
+      GINT_TO_POINTER (selfthread));
+  g_mutex_unlock (self->priv->mutex);
 }
 
 static void
 leave_thread (TpStreamEngine *self, GstObject *src, GstElement *owner)
 {
+  g_mutex_lock (self->priv->mutex);
+  g_hash_table_remove (self->priv->object_threads, src);
+  g_mutex_unlock (self->priv->mutex);
 }
 
 static GstBusSyncReply
-- 
1.5.6.5




More information about the telepathy-commits mailing list