[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