From 6b310e9cda2fbaa4b5a1ed4545acf50d338b7884 Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Sat, 19 Feb 2011 15:59:15 +0100 Subject: [PATCH 1/1] 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/forb/src/port.c | 2 ++ src/forb/src/proto_inet.c | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/src/forb/src/port.c b/src/forb/src/port.c index 0c54c400..637c22e3 100644 --- a/src/forb/src/port.c +++ b/src/forb/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/forb/src/proto_inet.c b/src/forb/src/proto_inet.c index f53043ba..e82e1582 100644 --- a/src/forb/src/proto_inet.c +++ b/src/forb/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