summaryrefslogtreecommitdiff
path: root/agent/agent.c
diff options
context:
space:
mode:
authorOlivier Crête <olivier.crete@collabora.com>2014-08-09 16:18:33 -0400
committerOlivier Crête <olivier.crete@collabora.com>2014-10-09 15:28:21 -0400
commit6fb00faadbe51d3ca4080cc48292950e7f7c7962 (patch)
treed6cbe9bf0ff259cd18e12c03d8565dfe43e9f0c9 /agent/agent.c
parentfcb1b84fd81f7db7dfe25bad824cb7fcfb254469 (diff)
downloadlibnice-6fb00faadbe51d3ca4080cc48292950e7f7c7962.tar.gz
agent: Remove socket source on HUP
Diffstat (limited to 'agent/agent.c')
-rw-r--r--agent/agent.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/agent/agent.c b/agent/agent.c
index 86421d8..ba92496 100644
--- a/agent/agent.c
+++ b/agent/agent.c
@@ -4645,6 +4645,24 @@ component_io_cb (GSocket *gsocket, GIOCondition condition, gpointer user_data)
g_object_ref (agent);
+ /* Remove disconnected sockets when we get a HUP */
+ if (condition & G_IO_HUP) {
+ nice_debug ("Agent %p: NiceSocket %p has received HUP", agent,
+ socket_source->socket);
+ if (component->selected_pair.local &&
+ component->selected_pair.local->sockptr == socket_source->socket &&
+ component->state == NICE_COMPONENT_STATE_READY) {
+ nice_debug ("Agent %p: Selected pair socket %p has HUP, declaring failed",
+ agent, socket_source->socket);
+ agent_signal_component_state_change (agent,
+ stream->id, component->id, NICE_COMPONENT_STATE_FAILED);
+ }
+
+ component_detach_socket (component, socket_source->socket);
+ agent_unlock ();
+ return G_SOURCE_REMOVE;
+ }
+
has_io_callback = component_has_io_callback (component);
/* Choose which receive buffer to use. If we’re reading for