VirtualBox

Changeset 48431 in vbox for trunk/src/VBox/Main/src-client


Ignore:
Timestamp:
Sep 11, 2013 2:08:36 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
88879
Message:

Main/Machine+Session: New generic client session watcher implementation based on token objects, works on all platforms and is used for now on XPCOM. Additionally a better error message when several API clients are racing for a lock, previously it could be quite confusing.

Location:
trunk/src/VBox/Main/src-client
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-client/ClientTokenHolder.cpp

    r47561 r48431  
    11/** @file
    22 *
    3  * VirtualBox API client token holder (in the client process)
     3 * VirtualBox API client session token holder (in the client process)
    44 */
    55
     
    101101    }
    102102
     103#elif defined(VBOX_WITH_GENERIC_SESSION_WATCHER)
     104
     105    if (!mToken.isNull())
     106    {
     107        mToken->Abandon();
     108        mToken.setNull();
     109    }
     110
    103111#else
    104112# error "Port me!"
     
    106114}
    107115
     116#ifndef VBOX_WITH_GENERIC_SESSION_WATCHER
    108117Session::ClientTokenHolder::ClientTokenHolder(const Utf8Str &strTokenId) :
    109118    mClientTokenId(strTokenId)
    110 {
     119#else /* VBOX_WITH_GENERIC_SESSION_WATCHER */
     120Session::ClientTokenHolder::ClientTokenHolder(IToken *aToken) :
     121    mToken(aToken)
     122#endif /* VBOX_WITH_GENERIC_SESSION_WATCHER */
     123{
     124#ifdef CTHSEMTYPE
    111125    mSem = CTHSEMARG;
     126#endif
     127#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
    112128    mThread = NIL_RTTHREAD;
     129#endif
    113130
    114131#if defined(RT_OS_WINDOWS)
     
    200217    mSem = s;
    201218
     219#elif defined(VBOX_WITH_GENERIC_SESSION_WATCHER)
     220
     221    /* nothing to do */
     222
    202223#else
    203224# error "Port me!"
     
    207228bool Session::ClientTokenHolder::isReady()
    208229{
     230#ifndef VBOX_WITH_GENERIC_SESSION_WATCHER
    209231    return mSem != CTHSEMARG;
     232#else /* VBOX_WITH_GENERIC_SESSION_WATCHER */
     233    return !mToken.isNull();
     234#endif /* VBOX_WITH_GENERIC_SESSION_WATCHER */
    210235}
    211236
  • trunk/src/VBox/Main/src-client/SessionImpl.cpp

    r48299 r48431  
    294294}
    295295
     296#ifndef VBOX_WITH_GENERIC_SESSION_WATCHER
    296297STDMETHODIMP Session::AssignMachine(IMachine *aMachine, LockType_T aLockType,
    297298                                    IN_BSTR aTokenId)
     299#else /* VBOX_WITH_GENERIC_SESSION_WATCHER */
     300STDMETHODIMP Session::AssignMachine(IMachine *aMachine, LockType_T aLockType,
     301                                    IToken *aToken)
     302#endif /* VBOX_WITH_GENERIC_SESSION_WATCHER */
    298303{
    299304    LogFlowThisFuncEnter();
     
    338343#endif
    339344
     345#ifndef VBOX_WITH_GENERIC_SESSION_WATCHER
    340346    Utf8Str strTokenId(aTokenId);
    341347    Assert(!strTokenId.isEmpty());
     348#else /* VBOX_WITH_GENERIC_SESSION_WATCHER */
     349    AssertPtr(aToken);
     350#endif /* VBOX_WITH_GENERIC_SESSION_WATCHER */
    342351    /* create the machine client token */
    343352    try
    344353    {
     354#ifndef VBOX_WITH_GENERIC_SESSION_WATCHER
    345355        mClientTokenHolder = new ClientTokenHolder(strTokenId);
     356#else /* VBOX_WITH_GENERIC_SESSION_WATCHER */
     357        mClientTokenHolder = new ClientTokenHolder(aToken);
     358#endif /* VBOX_WITH_GENERIC_SESSION_WATCHER */
    346359        if (!mClientTokenHolder->isReady())
    347360        {
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