tcp-passive: Relay the tcp writable callback up
authorOlivier Crête <olivier.crete@collabora.com>
Fri, 11 Jul 2014 21:59:27 +0000 (17:59 -0400)
committerOlivier Crête <olivier.crete@collabora.com>
Sat, 12 Jul 2014 19:09:53 +0000 (15:09 -0400)
Otherwise, the caller gets a callback from an unexpected source.

socket/tcp-passive.c

index a63a019..844012a 100644 (file)
@@ -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;