VirtualBox

Changeset 58364 in vbox for trunk/src/VBox/Devices/USB


Ignore:
Timestamp:
Oct 22, 2015 8:19:30 AM (9 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
103579
Message:

VUSB: Clear pDev->pvArgs before changing the state of the device to eliminate a possible race where a second reset has pDev->pvArgs reset while the first one is not yet complete

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/USB/VUSBDevice.cpp

    r57903 r58364  
    13571357    Assert(pDev->pUsbIns == pUsbIns);
    13581358
     1359    AssertPtr(pArgs);
     1360
    13591361    /*
    13601362     * Reset-done processing and cleanup.
    13611363     */
     1364    pDev->pvArgs = NULL;
    13621365    vusbDevResetDone(pDev, pArgs->rc, pArgs->pfnDone, pArgs->pvUser);
    1363     pDev->pvArgs = NULL;
    13641366    RTMemFree(pArgs);
    13651367}
     
    13781380    if (pDev->pUsbIns->pReg->pfnUsbReset)
    13791381        rc = pDev->pUsbIns->pReg->pfnUsbReset(pDev->pUsbIns, fResetOnLinux);
     1382
     1383    if (pArgs)
     1384    {
     1385        pArgs->rc = rc;
     1386        rc = VINF_SUCCESS;
     1387    }
    13801388
    13811389    if (fUseTimer)
     
    13881396        int rc2 = TMTimerSet(pDev->pResetTimer, u64EndTS);
    13891397        AssertReleaseRC(rc2);
    1390     }
    1391 
    1392     if (pArgs)
    1393     {
    1394         pArgs->rc = rc;
    1395         rc = VINF_SUCCESS;
    13961398    }
    13971399
     
    14601462            pArgs->pvUser  = pvUser;
    14611463            pArgs->rc      = VINF_SUCCESS;
     1464            AssertPtrNull(pDev->pvArgs);
    14621465            pDev->pvArgs   = pArgs;
    14631466            int rc = vusbDevIoThreadExec(pDev, 0 /* fFlags */, (PFNRT)vusbDevResetWorker, 4, pDev, fResetOnLinux, true, pArgs);
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