diff options
author | Olivier CrĂȘte <olivier.crete@collabora.com> | 2014-07-11 17:59:27 -0400 |
---|---|---|
committer | Olivier CrĂȘte <olivier.crete@collabora.com> | 2014-07-12 15:09:53 -0400 |
commit | c122e5adf48ffd03d99d132d45880a2924dc2ff7 (patch) | |
tree | af10e40d6265130718ca3a3a7ba48b6fc563fb03 | |
parent | cdbda884e1329b3784a1dd3514d4fc6db3b020d5 (diff) |
tcp-passive: Relay the tcp writable callback up
Otherwise, the caller gets a callback from an unexpected source.
-rw-r--r-- | socket/tcp-passive.c | 14 |
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; |