}
forb_free(peer);
}
+
+void
+forb_peer_delete_by_port(forb_t *forb, forb_port_t *port)
+{
+ forb_peer_t *peer;
+ fosa_mutex_lock(&port->forb->peer_mutex);
+ /* FIXME: Is gavl_cust_for_each() deletion safe? What about
+ * recursive locking of mutex. */
+#warning Delete during GAVL traversal is probably not correct.
+ gavl_cust_for_each(forb_peer_nolock, forb, peer) {
+ if (peer->port == port) {
+ forb_peer_nolock_delete(forb, peer);
+ forb_peer_put(peer);
+ }
+ }
+ fosa_mutex_unlock(&port->forb->peer_mutex);
+}
fosa_mutex_unlock(&forb->peer_mutex);
}
+void
+forb_peer_delete_by_port(forb_t *forb, forb_port_t *port);
+
/**
* Finds peer with given @a server_id.
*
void forb_destroy_port(forb_port_t *port)
{
- forb_peer_t *peer;
forb_t *forb = port->forb;
port->finish = true; /* Exit all the threads */
port->proto->port_destroy(port);
}
- fosa_mutex_lock(&port->forb->peer_mutex);
- /* FIXME: Is gavl_cust_for_each() deletion safe? What about
- * recursive locking of mutex. */
-#warning Delete during GAVL traversal is problbly not correct.
- gavl_cust_for_each(forb_peer_nolock, forb, peer) {
- if (peer->port == port) {
- forb_peer_delete(forb, peer);
- }
- }
- fosa_mutex_unlock(&port->forb->peer_mutex);
+ forb_peer_delete_by_port(forb, port);
/* TODO: reference counting */
forb_free(port);
if (pd->socket == -1) goto err1;
unix_server_to_addr(&pd->addr, server);
+ /* unlink(pd->addr.sun_path); */ /* TODO: What to do when the socket already exist? */
ret = bind(pd->socket, (struct sockaddr*)&pd->addr, sizeof(pd->addr));
if (ret == -1) goto err;