Changeset 30421 in vbox for trunk/src/VBox
- Timestamp:
- Jun 24, 2010 11:59:49 AM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 63055
- Location:
- trunk/src/VBox/Devices/Network
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Network/DrvNAT.cpp
r30349 r30421 284 284 AssertRC(rc); 285 285 286 slirp_ext_m_free(pThis->pNATState, m); 287 RTMemFree(pu8Buf); 286 slirp_ext_m_free(pThis->pNATState, m, pu8Buf); 288 287 if (ASMAtomicDecU32(&pThis->cUrgPkts) == 0) 289 288 { … … 329 328 330 329 done_unlocked: 331 slirp_ext_m_free(pThis->pNATState, m); 332 RTMemFree(pu8Buf); 330 slirp_ext_m_free(pThis->pNATState, m, pu8Buf); 333 331 ASMAtomicDecU32(&pThis->cPkts); 334 332 … … 352 350 { 353 351 Assert(!pSgBuf->pvUser); 354 slirp_ext_m_free(pThis->pNATState, (struct mbuf *)pSgBuf->pvAllocator );352 slirp_ext_m_free(pThis->pNATState, (struct mbuf *)pSgBuf->pvAllocator, NULL); 355 353 pSgBuf->pvAllocator = NULL; 356 354 } -
trunk/src/VBox/Devices/Network/slirp/libslirp.h
r30016 r30421 127 127 128 128 struct mbuf *slirp_ext_m_get(PNATState pData, size_t cbMin, void **ppvBuf, size_t *pcbBuf); 129 void slirp_ext_m_free(PNATState pData, struct mbuf * );129 void slirp_ext_m_free(PNATState pData, struct mbuf *, uint8_t *pu8Buf); 130 130 131 131 /* -
trunk/src/VBox/Devices/Network/slirp/misc.c
r30016 r30421 418 418 } 419 419 420 void slirp_ext_m_free(PNATState pData, struct mbuf *m) 421 { 420 void slirp_ext_m_free(PNATState pData, struct mbuf *m, uint8_t *pu8Buf) 421 { 422 423 if ( !pu8Buf 424 && pu8Buf != mtod(m, uint8_t *)) 425 RTMemFree(pu8Buf); /* This buffer was allocated on heap */ 422 426 m_freem(pData, m); 423 427 } -
trunk/src/VBox/Devices/Network/slirp/slirp.c
r30363 r30421 1538 1538 struct ethhdr *eh; 1539 1539 uint8_t *buf = NULL; 1540 uint8_t *mbuf = NULL; 1540 1541 size_t mlen = 0; 1541 1542 STAM_PROFILE_START(&pData->StatIF_encap, a); … … 1545 1546 m->m_len += ETH_HLEN; 1546 1547 eh = mtod(m, struct ethhdr *); 1548 mlen = m_length(m, NULL); 1547 1549 1548 1550 if (memcmp(eh->h_source, special_ethaddr, ETH_ALEN) != 0) … … 1558 1560 } 1559 1561 } 1560 mlen = m_length(m, NULL); 1561 buf = RTMemAlloc(mlen); 1562 if (!buf) 1563 { 1564 LogRel(("NAT: Can't alloc memory for outgoing buffer\n")); 1565 m_freem(pData, m); 1566 goto done; 1567 } 1562 if (m->m_next) 1563 { 1564 buf = RTMemAlloc(mlen); 1565 if (!buf) 1566 { 1567 LogRel(("NAT: Can't alloc memory for outgoing buffer\n")); 1568 m_freem(pData, m); 1569 goto done; 1570 } 1571 mbuf = buf; 1572 m_copydata(m, 0, mlen, (char *)buf); 1573 } 1574 else 1575 mbuf = mtod(m, uint8_t *); 1568 1576 eh->h_proto = RT_H2N_U16(eth_proto); 1569 m_copydata(m, 0, mlen, (char *)buf);1570 1577 if (flags & ETH_ENCAP_URG) 1571 slirp_urg_output(pData->pvUser, m, buf, mlen);1578 slirp_urg_output(pData->pvUser, m, mbuf, mlen); 1572 1579 else 1573 slirp_output(pData->pvUser, m, buf, mlen);1580 slirp_output(pData->pvUser, m, mbuf, mlen); 1574 1581 done: 1575 1582 STAM_PROFILE_STOP(&pData->StatIF_encap, a);
Note:
See TracChangeset
for help on using the changeset viewer.