diff options
Diffstat (limited to 'src/kdc/network.c')
-rw-r--r-- | src/kdc/network.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/kdc/network.c b/src/kdc/network.c index 4c49102..c8bf5af 100644 --- a/src/kdc/network.c +++ b/src/kdc/network.c @@ -328,8 +328,9 @@ delete_fd (struct connection *xconn) FOREACH_ELT(connections, i, conn) if (conn == xconn) { DEL(connections, i); - return; + break; } + free(xconn); } static int @@ -841,6 +842,7 @@ static void accept_tcp_connection(struct connection *conn, const char *prog, newconn->u.tcp.addrbuf); delete_fd(newconn); close(s); + tcp_data_counter--; return; } newconn->u.tcp.offset = 0; @@ -857,7 +859,6 @@ static void accept_tcp_connection(struct connection *conn, const char *prog, static void kill_tcp_connection(struct connection *conn) { - delete_fd(conn); if (conn->u.tcp.response) krb5_free_data(kdc_context, conn->u.tcp.response); if (conn->u.tcp.buffer) @@ -873,6 +874,7 @@ kill_tcp_connection(struct connection *conn) sstate.max--; close(conn->fd); conn->fd = -1; + delete_fd(conn); tcp_data_counter--; } |