5 GAVL_CUST_NODE_INT_IMP(forb_peer_nolock,/* cust_prefix */
6 forb_t, /* cust_root_t */
7 forb_peer_t, /* cust_item_t */
8 forb_server_id, /* cust_key_t */
9 peers, /* cust_root_node */
10 node, /* cust_item_node */
11 server_id, /* cust_item_key */
12 forb_server_id_cmp);/* cust_cmp_fnc */
21 peer = forb_malloc(sizeof(*peer));
23 forb_ref_init(&peer->ref);
29 forb_peer_release(forb_ref_t *ref)
31 forb_peer_t *peer = container_of(ref, forb_peer_t, ref);
32 if (peer->port->proto->peer_destroy) {
33 peer->port->proto->peer_destroy(peer);
39 forb_peer_delete_by_port(forb_t *forb, forb_port_t *port)
42 fosa_mutex_lock(&port->forb->peer_mutex);
43 /* FIXME: Is gavl_cust_for_each() deletion safe? What about
44 * recursive locking of mutex. */
45 #warning Delete during GAVL traversal is probably not correct.
46 gavl_cust_for_each(forb_peer_nolock, forb, peer) {
47 if (peer->port == port) {
48 forb_peer_nolock_delete(forb, peer);
52 fosa_mutex_unlock(&port->forb->peer_mutex);