summaryrefslogtreecommitdiff
path: root/socket
diff options
context:
space:
mode:
authorOlivier CrĂȘte <olivier.crete@collabora.com>2014-07-11 17:59:27 -0400
committerOlivier CrĂȘte <olivier.crete@collabora.com>2014-07-12 15:09:53 -0400
commitc122e5adf48ffd03d99d132d45880a2924dc2ff7 (patch)
treeaf10e40d6265130718ca3a3a7ba48b6fc563fb03 /socket
parentcdbda884e1329b3784a1dd3514d4fc6db3b020d5 (diff)
tcp-passive: Relay the tcp writable callback up
Otherwise, the caller gets a callback from an unexpected source.
Diffstat (limited to 'socket')
-rw-r--r--socket/tcp-passive.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/socket/tcp-passive.c b/socket/tcp-passive.c
index a63a019..844012a 100644
--- a/socket/tcp-passive.c
+++ b/socket/tcp-passive.c
@@ -73,8 +73,6 @@ static void socket_set_writable_callback (NiceSocket *sock,
NiceSocketWritableCb callback, gpointer user_data);
static guint nice_address_hash (const NiceAddress * key);
-static void _set_child_callbacks (NiceAddress *addr, NiceSocket *child,
- NiceSocket *sock);
NiceSocket *
nice_tcp_passive_socket_new (GMainContext *ctx, NiceAddress *addr,
@@ -245,13 +243,13 @@ socket_can_send (NiceSocket *sock, NiceAddress *addr)
}
static void
-_set_child_callbacks (NiceAddress *addr, NiceSocket *child, NiceSocket *sock)
+_child_writable_cb (NiceSocket *child, gpointer data)
{
+ NiceSocket *sock = data;
TcpPassivePriv *priv = sock->priv;
- /* FIXME: Danger if child socket was closed */
- nice_socket_set_writable_callback (child, priv->writable_cb,
- priv->writable_data);
+ if (priv->writable_cb)
+ priv->writable_cb (sock, priv->writable_data);
}
static void
@@ -262,8 +260,6 @@ socket_set_writable_callback (NiceSocket *sock,
priv->writable_cb = callback;
priv->writable_data = user_data;
-
- g_hash_table_foreach (priv->connections, (GHFunc) _set_child_callbacks, sock);
}
NiceSocket *
@@ -306,7 +302,7 @@ nice_tcp_passive_socket_accept (NiceSocket *sock)
if (new_socket) {
NiceAddress *key = nice_address_dup (&remote_addr);
- _set_child_callbacks (key, new_socket, sock);
+ nice_socket_set_writable_callback (new_socket, _child_writable_cb, sock);
g_hash_table_insert (priv->connections, key, new_socket);
}
return new_socket;