VirtualBox

Changeset 40506 in vbox for trunk


Ignore:
Timestamp:
Mar 16, 2012 5:05:32 PM (13 years ago)
Author:
vboxsync
Message:

Main/Medium: Hopefully final go at holding the Medium object lock as briefly as possible. Previously the code was simpler, but held the lock over long operations such as opening images, and this caused e.g. slow GUI startup time.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-server/MediumImpl.cpp

    r40487 r40506  
    54085408     * of the method), then queryInfoSem, and below the other way round. */
    54095409    AutoWriteLock qlock(m->queryInfoSem COMMA_LOCKVAL_SRC_POS);
    5410     alock.acquire();
    54115410
    54125411    try
     
    54465445                if (fSetImageId)
    54475446                {
     5447                    alock.acquire();
    54485448                    vrc = VDSetUuid(hdd, 0, m->uuidImage.raw());
     5449                    alock.release();
    54495450                    ComAssertRCThrow(vrc, E_FAIL);
    54505451                    mediumId = m->uuidImage;
     
    54525453                if (fSetParentId)
    54535454                {
     5455                    alock.acquire();
    54545456                    vrc = VDSetParentUuid(hdd, 0, m->uuidParentImage.raw());
     5457                    alock.release();
    54555458                    ComAssertRCThrow(vrc, E_FAIL);
    54565459                }
    54575460                /* zap the information, these are no long-term members */
     5461                alock.acquire();
    54585462                unconst(m->uuidImage).clear();
    54595463                unconst(m->uuidParentImage).clear();
     5464                alock.release();
    54605465
    54615466                /* check the UUID */
     
    54975502                {
    54985503                    /* set the UUID if an API client wants to change it */
     5504                    alock.acquire();
    54995505                    mediumId = m->uuidImage;
     5506                    alock.release();
    55005507                }
    55015508                else if (isImport)
     
    55105517            vrc = VDGetImageFlags(hdd, 0, &uImageFlags);
    55115518            ComAssertRCThrow(vrc, E_FAIL);
     5519            alock.acquire();
    55125520            m->variant = (MediumVariant_T)uImageFlags;
     5521            alock.release();
    55135522
    55145523            /* check/get the parent uuid and update corresponding state */
     
    55475556
    55485557                    /* we set mParent & children() */
    5549                     alock.release();
    55505558                    treeLock.acquire();
    55515559
     
    55555563
    55565564                    treeLock.release();
    5557                     alock.acquire();
    55585565                }
    55595566                else
    55605567                {
    55615568                    /* we access mParent */
    5562                     alock.release();
    55635569                    treeLock.acquire();
    55645570
     
    55855591                                m->pVirtualBox->settingsFilePath().c_str());
    55865592                        treeLock.release();
    5587                         alock.acquire();
    55885593                        throw S_OK;
    55895594#endif /* 0 */
     
    56045609                            parentLock.release();
    56055610                            treeLock.release();
    5606                             alock.acquire();
    56075611                            throw S_OK;
    56085612                        }
     
    56145618
    56155619                    treeLock.release();
    5616                     alock.acquire();
    56175620                }
    56185621            }
     
    56425645    }
    56435646
    5644     alock.release();
    56455647    treeLock.acquire();
    56465648    alock.acquire();
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