Commit e0a7b934 authored by Olivier Crête's avatar Olivier Crête

component: Keep its own context at all times

Don't re-create it.
parent 27e653ce
...@@ -125,6 +125,9 @@ component_new (guint id, NiceAgent *agent, Stream *stream) ...@@ -125,6 +125,9 @@ component_new (guint id, NiceAgent *agent, Stream *stream)
g_queue_init (&component->pending_io_messages); g_queue_init (&component->pending_io_messages);
component->io_callback_id = 0; component->io_callback_id = 0;
component->own_ctx = g_main_context_new ();
component->ctx = g_main_context_ref (component->own_ctx);
/* Start off with a fresh main context and all I/O paused. This /* Start off with a fresh main context and all I/O paused. This
* will be updated when nice_agent_attach_recv() or nice_agent_recv_messages() * will be updated when nice_agent_attach_recv() or nice_agent_recv_messages()
* are called. */ * are called. */
...@@ -207,6 +210,8 @@ component_free (Component *cmp) ...@@ -207,6 +210,8 @@ component_free (Component *cmp)
cmp->ctx = NULL; cmp->ctx = NULL;
} }
g_main_context_unref (cmp->own_ctx);
while ((vec = g_queue_pop_head (&cmp->queued_tcp_packets)) != NULL) { while ((vec = g_queue_pop_head (&cmp->queued_tcp_packets)) != NULL) {
g_free ((gpointer) vec->buffer); g_free ((gpointer) vec->buffer);
g_slice_free (GOutputVector, vec); g_slice_free (GOutputVector, vec);
...@@ -540,25 +545,25 @@ component_free_socket_sources (Component *component) ...@@ -540,25 +545,25 @@ component_free_socket_sources (Component *component)
GMainContext * GMainContext *
component_dup_io_context (Component *component) component_dup_io_context (Component *component)
{ {
return g_main_context_ref (component->ctx); return g_main_context_ref (component->own_ctx);
} }
/* If @context is %NULL, a fresh context is used, so component->ctx is always /* If @context is %NULL, it's own context is used, so component->ctx is always
* guaranteed to be non-%NULL. */ * guaranteed to be non-%NULL. */
void void
component_set_io_context (Component *component, GMainContext *context) component_set_io_context (Component *component, GMainContext *context)
{ {
g_mutex_lock (&component->io_mutex); g_mutex_lock (&component->io_mutex);
if (component->ctx != context || component->ctx == NULL) { if (component->ctx != context) {
if (context == NULL) if (context == NULL)
context = g_main_context_new (); context = g_main_context_ref (component->own_ctx);
else else
g_main_context_ref (context); g_main_context_ref (context);
component_detach_all_sockets (component); component_detach_all_sockets (component);
if (component->ctx != NULL) g_main_context_unref (component->ctx);
g_main_context_unref (component->ctx);
component->ctx = context; component->ctx = context;
component_reattach_all_sockets (component); component_reattach_all_sockets (component);
} }
......
...@@ -171,8 +171,10 @@ struct _Component ...@@ -171,8 +171,10 @@ struct _Component
IOCallbackData */ IOCallbackData */
guint io_callback_id; /* GSource ID of the I/O callback */ guint io_callback_id; /* GSource ID of the I/O callback */
GMainContext *ctx; /**< context for GSources for this GMainContext *own_ctx; /**< own context for GSources for this
component */ component */
GMainContext *ctx; /**< context for GSources for this
component (possibly set from the app) */
NiceInputMessage *recv_messages; /**< unowned messages for receiving into */ NiceInputMessage *recv_messages; /**< unowned messages for receiving into */
guint n_recv_messages; /**< length of recv_messages */ guint n_recv_messages; /**< length of recv_messages */
NiceInputMessageIter recv_messages_iter; /**< current write position in NiceInputMessageIter recv_messages_iter; /**< current write position in
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment