Skip to content

Commit

Permalink
[tcp] Discard all TCP connections on shutdown
Browse files Browse the repository at this point in the history
Allow detection of genuine memory leaks by ensuring that all TCP
connections are freed on shutdown.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed May 8, 2012
1 parent 52dd4ba commit 8a0331c
Showing 1 changed file with 22 additions and 0 deletions.
22 changes: 22 additions & 0 deletions src/net/tcp.c
Expand Up @@ -7,6 +7,7 @@
#include <ipxe/timer.h>
#include <ipxe/iobuf.h>
#include <ipxe/malloc.h>
#include <ipxe/init.h>
#include <ipxe/retry.h>
#include <ipxe/refcnt.h>
#include <ipxe/xfer.h>
Expand Down Expand Up @@ -343,6 +344,7 @@ static void tcp_close ( struct tcp_connection *tcp, int rc ) {

/* Remove from list and drop reference */
stop_timer ( &tcp->timer );
stop_timer ( &tcp->wait );
list_del ( &tcp->list );
ref_put ( &tcp->refcnt );
DBGC ( tcp, "TCP %p connection deleted\n", tcp );
Expand Down Expand Up @@ -1261,6 +1263,26 @@ struct cache_discarder tcp_cache_discarder __cache_discarder = {
.discard = tcp_discard,
};

/**
* Shut down all TCP connections
*
*/
static void tcp_shutdown ( int booting __unused ) {
struct tcp_connection *tcp;

while ( ( tcp = list_first_entry ( &tcp_conns, struct tcp_connection,
list ) ) != NULL ) {
tcp->tcp_state = TCP_CLOSED;
tcp_dump_state ( tcp );
tcp_close ( tcp, -ECANCELED );
}
}

/** TCP shutdown function */
struct startup_fn tcp_startup_fn __startup_fn ( STARTUP_EARLY ) = {
.shutdown = tcp_shutdown,
};

/***************************************************************************
*
* Data transfer interface
Expand Down

0 comments on commit 8a0331c

Please sign in to comment.