Index: net/bsd_tcpip/current/ChangeLog =================================================================== RCS file: /cvs/ecos/ecos-opt/net/net/bsd_tcpip/current/ChangeLog,v retrieving revision 1.52 diff -u -r1.52 ChangeLog --- net/bsd_tcpip/current/ChangeLog 27 Mar 2005 18:18:13 -0000 1.52 +++ net/bsd_tcpip/current/ChangeLog 17 Jun 2005 20:08:29 -0000 @@ -1,3 +1,8 @@ +2005-06-17 Andrew Lunn + + * src/sys/kern/uipc_socket.c (sodealloc): Fixed a race condition + when freeing the socket memory. Problem reported by Will Lent. + 2005-03-27 Andrew Lunn * src/sys/net/if.c (ifioctl): Fixed a compiler warning about Index: net/bsd_tcpip/current/src/sys/kern/uipc_socket.c =================================================================== RCS file: /cvs/ecos/ecos-opt/net/net/bsd_tcpip/current/src/sys/kern/uipc_socket.c,v retrieving revision 1.3 diff -u -r1.3 uipc_socket.c --- net/bsd_tcpip/current/src/sys/kern/uipc_socket.c 24 Jul 2003 18:04:25 -0000 1.3 +++ net/bsd_tcpip/current/src/sys/kern/uipc_socket.c 17 Jun 2005 20:08:31 -0000 @@ -188,8 +188,10 @@ void sodealloc(so) struct socket *so; + { - + vm_zone_t zone; + so->so_gencnt = ++so_gencnt; #ifdef INET if (so->so_accf != NULL) { @@ -202,8 +204,9 @@ FREE(so->so_accf, M_ACCF); } #endif /* INET */ - zfreei(so->so_zone, so); - wakeup(so->so_zone); + zone = so->so_zone; + zfreei(zone, so); + wakeup(zone); } int