mirror of
https://github.com/xcat2/xNBA.git
synced 2024-11-26 03:09:12 +00:00
[tcp] Discard all TCP connections on shutdown
Allow detection of genuine memory leaks by ensuring that all TCP connections are freed on shutdown. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
parent
52dd4bacad
commit
8a0331c29b
@ -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>
|
||||
@ -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 );
|
||||
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user