diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2014-03-26 19:21:20 +0000 |
---|---|---|
committer | <> | 2014-05-08 15:03:54 +0000 |
commit | fb123f93f9f5ce42c8e5785d2f8e0edaf951740e (patch) | |
tree | c2103d76aec5f1f10892cd1d3a38e24f665ae5db /src/VBox/Devices/Network/slirp/socket.c | |
parent | 58ed4748338f9466599adfc8a9171280ed99e23f (diff) | |
download | VirtualBox-master.tar.gz |
Imported from /home/lorry/working-area/delta_VirtualBox/VirtualBox-4.3.10.tar.bz2.HEADVirtualBox-4.3.10master
Diffstat (limited to 'src/VBox/Devices/Network/slirp/socket.c')
-rw-r--r-- | src/VBox/Devices/Network/slirp/socket.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/VBox/Devices/Network/slirp/socket.c b/src/VBox/Devices/Network/slirp/socket.c index 05d122bb..d1e7e2a0 100644 --- a/src/VBox/Devices/Network/slirp/socket.c +++ b/src/VBox/Devices/Network/slirp/socket.c @@ -4,7 +4,7 @@ */ /* - * Copyright (C) 2006-2010 Oracle Corporation + * Copyright (C) 2006-2012 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -195,6 +195,9 @@ sofree(PNATState pData, struct socket *so) * Check that we don't freeng socket with tcbcb */ Assert(!sototcpcb(so)); + /* udp checks */ + Assert(!so->so_timeout); + Assert(!so->so_timeout_arg); if (so == tcp_last_so) tcp_last_so = &tcb; else if (so == udp_last_so) @@ -1137,9 +1140,10 @@ solisten(PNATState pData, u_int32_t bind_addr, u_int port, u_int32_t laddr, u_in #else int tmperrno = errno; /* Don't clobber the real reason we failed */ close(s); - QSOCKET_LOCK(tcb); - sofree(pData, so); - QSOCKET_UNLOCK(tcb); + if (sototcpcb(so)) + tcp_close(pData, sototcpcb(so)); + else + sofree(pData, so); /* Restore the real errno */ errno = tmperrno; #endif @@ -1474,7 +1478,7 @@ sorecvfrom_icmp_win(PNATState pData, struct socket *so) int out_len; int size; - len = pData->pfIcmpParseReplies(pData->pvIcmpBuffer, pData->szIcmpBuffer); + len = pData->pfIcmpParseReplies(pData->pvIcmpBuffer, pData->cbIcmpBuffer); if (len < 0) { LogRel(("NAT: Error (%d) occurred on ICMP receiving\n", GetLastError())); |