summaryrefslogtreecommitdiffstats
path: root/sys/netatalk/ddp_pcb.c
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2006-03-17 20:40:17 +0000
committerrwatson <rwatson@FreeBSD.org>2006-03-17 20:40:17 +0000
commit76be92c1fd12cec9a2581cc5005447062182a4ab (patch)
tree61ebc965b2fffece1ff25d1b6c69913d8480e955 /sys/netatalk/ddp_pcb.c
parentcbcf9b2ad93aae5c590fdea1786ba60eac7c97fa (diff)
downloadFreeBSD-src-76be92c1fd12cec9a2581cc5005447062182a4ab.zip
FreeBSD-src-76be92c1fd12cec9a2581cc5005447062182a4ab.tar.gz
Modify netatalk to ensure, and assert, that pcb's remain attached to
sockets as long as the sockets have not been aborted or detached. Do not try to free the socket in pru_detach(), since sofree() will do so, if needed, once pru_detach() returns. Annotate a bug in ddp_abort(), which fails to free the socket; this is probably OK as ddp_abort() should never be called, so should instead be deleted.
Diffstat (limited to 'sys/netatalk/ddp_pcb.c')
-rw-r--r--sys/netatalk/ddp_pcb.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/sys/netatalk/ddp_pcb.c b/sys/netatalk/ddp_pcb.c
index 23ccd8c..3c8ac96 100644
--- a/sys/netatalk/ddp_pcb.c
+++ b/sys/netatalk/ddp_pcb.c
@@ -302,12 +302,11 @@ at_pcbdetach(struct socket *so, struct ddpcb *ddp)
*/
DDP_LIST_XLOCK_ASSERT();
DDP_LOCK_ASSERT(ddp);
+ KASSERT(so->so_pcb != NULL, ("at_pcbdetach: so_pcb == NULL"));
+ /* XXXRW: Why bother to disconnect it now? */
soisdisconnected(so);
- ACCEPT_LOCK();
- SOCK_LOCK(so);
so->so_pcb = NULL;
- sotryfree(so);
/* remove ddp from ddp_ports list */
if (ddp->ddp_lsat.sat_port != ATADDR_ANYPORT &&
OpenPOWER on IntegriCloud