Mfp: r296259

We attach the "counter" to the tcpcbs. Thus don't free the
TCP Fastopen zone before the tcpcbs are gone, as otherwise
the zone won't be empty.
With that it should be safe to destroy the "tfo" zone without
leaking the memory.

PR:		164763
Reviewed by:	gnn
MFC after:	2 weeks
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D5731
This commit is contained in:
Bjoern A. Zeeb 2016-04-09 10:58:08 +00:00
parent b805f83da7
commit f254aeda60
2 changed files with 9 additions and 4 deletions

View File

@ -204,7 +204,7 @@ void
tcp_fastopen_init(void)
{
V_counter_zone = uma_zcreate("tfo", sizeof(unsigned int),
NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE);
NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0);
rm_init(&V_tcp_fastopen_keylock, "tfo_keylock");
callout_init_rm(&V_tcp_fastopen_autokey_ctx.c,
&V_tcp_fastopen_keylock, 0);

View File

@ -738,9 +738,6 @@ tcp_destroy(void)
{
int error;
#ifdef TCP_RFC7413
tcp_fastopen_destroy();
#endif
tcp_hc_destroy();
syncache_destroy();
tcp_tw_destroy();
@ -748,6 +745,14 @@ tcp_destroy(void)
uma_zdestroy(V_sack_hole_zone);
uma_zdestroy(V_tcpcb_zone);
#ifdef TCP_RFC7413
/*
* Cannot free the zone until all tcpcbs are released as we attach
* the allocations to them.
*/
tcp_fastopen_destroy();
#endif
error = hhook_head_deregister(V_tcp_hhh[HHOOK_TCP_EST_IN]);
if (error != 0) {
printf("%s: WARNING: unable to deregister helper hook "