VirtualBox

Changeset 30350 in vbox


Ignore:
Timestamp:
Jun 22, 2010 2:39:23 AM (14 years ago)
Author:
vboxsync
Message:

NAT: Don't m_free mbuf just after send,
it's responsible of recv threads to release mbuf.

Location:
trunk/src/VBox/Devices/Network/slirp
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Network/slirp/ip_input.c

    r30016 r30350  
    121121        int rc;
    122122        STAM_PROFILE_START(&pData->StatALIAS_input, b);
    123         rc = LibAliasIn(select_alias(pData, m), mtod(m, char *), m->m_len);
     123        rc = LibAliasIn(select_alias(pData, m), mtod(m, char *), m_length(m, NULL));
    124124        STAM_PROFILE_STOP(&pData->StatALIAS_input, b);
    125125        Log2(("NAT: LibAlias return %d\n", rc));
     
    196196    {
    197197        icmp_error(pData, m, ICMP_TIMXCEED, ICMP_TIMXCEED_INTRANS, 0, "ttl");
    198         goto bad;
     198        /* don't let this mbuf to be freed */
     199        return;
    199200    }
    200201
  • trunk/src/VBox/Devices/Network/slirp/slirp.c

    r30045 r30350  
    14441444                memcpy(rah->ar_tip, ah->ar_sip, 4);
    14451445                if_encap(pData, ETH_P_ARP, mr, ETH_ENCAP_URG);
    1446                 m_freem(pData, m);
    14471446            }
    14481447            /* Gratuitous ARP */
     
    14561455                if (slirp_arp_cache_update(pData, *(uint32_t *)ah->ar_tip, &eh->h_dest[0]) == 0)
    14571456                {
    1458                     m_freem(pData, mr);
    14591457                    m_freem(pData, m);
    14601458                    break;
  • trunk/src/VBox/Devices/Network/slirp/tcp_input.c

    r30045 r30350  
    798798                }
    799799                tp = tcp_close(pData, tp);
    800                 m_freem(pData, m);
    801800            }
    802801            else
  • trunk/src/VBox/Devices/Network/slirp/udp.c

    r30016 r30350  
    190190        dst.sin_addr.s_addr = ip->ip_src.s_addr;
    191191        dst.sin_port = uh->uh_sport;
    192         /* udp_output2 will do opposite operations on mbuf*/
     192
     193        /* udp_output2 expects pointer on the body of UDP packet. */
    193194
    194195        m->m_data += sizeof(struct udpiphdr);
    195196        m->m_len -= sizeof(struct udpiphdr);
    196197        udp_output2(pData, NULL, m, &src, &dst, IPTOS_LOWDELAY);
    197         goto done;
     198        /* we shouldn't free this mbuf*/
     199        return;
    198200    }
    199201    /*
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette