From bc0683b2b7a57c32dffa122a925e1137d8a69d99 Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Sat, 19 Feb 2011 15:59:15 +0100 Subject: [PATCH] forb: Free "new_peers" on destroy The so called new_peers were not freed and their sockets were not closed. We are fixing it now. --- src/port.c | 2 ++ src/proto_inet.c | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/src/port.c b/src/port.c index 0c54c40..637c22e 100644 --- a/src/port.c +++ b/src/port.c @@ -177,6 +177,8 @@ void forb_destroy_port(forb_port_t *port) forb_peer_disconnected(peer); forb_peer_put(peer); } + if (port->new_peer) + forb_peer_put(port->new_peer); if (port->desc.proto->port_destroy) { port->desc.proto->port_destroy(port); diff --git a/src/proto_inet.c b/src/proto_inet.c index f53043b..e82e158 100644 --- a/src/proto_inet.c +++ b/src/proto_inet.c @@ -417,9 +417,13 @@ static int inet_port_destroy(forb_port_t * port) { struct inet_port *pd = port->desc.proto_priv; + forb_peer_t *peer; close(pd->epoll_fd); close(pd->udp_socket); close(pd->listen_socket); + ul_list_for_each_cut(inet_port_new_peer, pd, peer) { + forb_peer_put(peer); + } forb_free(pd); return 0; } -- 2.39.2