VirtualBox

Changeset 68255 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
Aug 2, 2017 3:56:18 PM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
117367
Message:

DBGFR3InfoDeregisterDevice,DBGFR3InfoDeregisterDevice: Better fix for freeing the first list item.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/DBGFInfo.cpp

    r68254 r68255  
    501501         * Free all owned by the device.
    502502         */
    503         for (; pInfo; pPrev = pInfo, pInfo = pInfo->pNext)
     503        while (pInfo != NULL)
    504504            if (    pInfo->enmType == DBGFINFOTYPE_DEV
    505505                &&  pInfo->u.Dev.pDevIns == pDevIns)
    506506            {
     507                PDBGFINFO volatile pFree = pInfo;
    507508                if (pPrev)
    508                     pPrev->pNext = pInfo->pNext;
     509                    pInfo = pPrev->pNext = pInfo->pNext;
    509510                else
    510                     pUVM->dbgf.s.pInfoFirst = pInfo->pNext;
    511                 MMR3HeapFree(pInfo);
    512                 pInfo = pPrev;
    513                 if (!pInfo)
    514                     break;
     511                    pInfo = pUVM->dbgf.s.pInfoFirst = pInfo->pNext;
     512                MMR3HeapFree(pFree);
     513            }
     514            else
     515            {
     516                pPrev = pInfo;
     517                pInfo = pInfo->pNext;
    515518            }
    516519        rc = VINF_SUCCESS;
     
    575578         * Free all owned by the driver.
    576579         */
    577         for (; pInfo; pPrev = pInfo, pInfo = pInfo->pNext)
     580        while (pInfo != NULL)
    578581            if (    pInfo->enmType == DBGFINFOTYPE_DRV
    579582                &&  pInfo->u.Drv.pDrvIns == pDrvIns)
    580583            {
     584                PDBGFINFO volatile pFree = pInfo;
    581585                if (pPrev)
    582                     pPrev->pNext = pInfo->pNext;
     586                    pInfo = pPrev->pNext = pInfo->pNext;
    583587                else
    584                     pUVM->dbgf.s.pInfoFirst = pInfo->pNext;
    585                 MMR3HeapFree(pInfo);
    586                 pInfo = pPrev;
     588                    pInfo = pUVM->dbgf.s.pInfoFirst = pInfo->pNext;
     589                MMR3HeapFree(pFree);
     590            }
     591            else
     592            {
     593                pPrev = pInfo;
     594                pInfo = pInfo->pNext;
    587595            }
    588596        rc = VINF_SUCCESS;
Note: See TracChangeset for help on using the changeset viewer.

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