VirtualBox

Changeset 48431 in vbox for trunk/src/VBox/Main/include


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/include
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/include/ClientToken.h

    r47561 r48431  
    33/** @file
    44 *
    5  * VirtualBox API client token abstraction
     5 * VirtualBox API client session token abstraction
    66 */
    77
     
    2525
    2626#include "MachineImpl.h"
     27#ifdef VBOX_WITH_GENERIC_SESSION_WATCHER
     28# include "TokenImpl.h"
     29#endif /* VBOX_WITH_GENERIC_SESSION_WATCHER */
    2730
    2831#if defined(RT_OS_WINDOWS)
     
    3538# define CTTOKENARG -1
    3639# define CTTOKENTYPE int
     40#elif defined(VBOX_WITH_GENERIC_SESSION_WATCHER)
     41# define CTTOKENARG NULL
     42# define CTTOKENTYPE MachineToken *
    3743#else
    3844# error "Port me!"
     
    4955     * Constructor which creates a usable instance
    5056     *
    51      * @param pMachine  Reference to Machine object
     57     * @param pMachine          Reference to Machine object
     58     * @param pSessionMachine   Reference to corresponding SessionMachine object
    5259     */
    53     ClientToken(const ComObjPtr<Machine> &pMachine);
     60    ClientToken(const ComObjPtr<Machine> &pMachine, SessionMachine *pSessionMachine);
    5461
    5562    /**
     
    7481    CTTOKENTYPE getToken();
    7582
     83#ifndef VBOX_WITH_GENERIC_SESSION_WATCHER
    7684    /**
    7785     * Release token now. Returns information if the client has terminated.
    7886     */
    7987    bool release();
     88#endif /* !VBOX_WITH_GENERIC_SESSION_WATCHER */
    8089
    8190private:
     
    8897    CTTOKENTYPE mClientToken;
    8998    Utf8Str mClientTokenId;
     99#ifdef VBOX_WITH_GENERIC_SESSION_WATCHER
     100    bool mClientTokenPassed;
     101#endif
    90102};
    91103
  • trunk/src/VBox/Main/include/ClientTokenHolder.h

    r47561 r48431  
    33/** @file
    44 *
    5  * VirtualBox API client token holder (in the client process)
     5 * VirtualBox API client session token holder (in the client process)
    66 */
    77
     
    3535# define CTHSEMARG -1
    3636# define CTHSEMTYPE int
     37#elif defined(VBOX_WITH_GENERIC_SESSION_WATCHER)
     38/* the token object based implementation needs no semaphores */
    3739#else
    3840# error "Port me!"
     
    4648{
    4749public:
     50#ifndef VBOX_WITH_GENERIC_SESSION_WATCHER
    4851    /**
    4952     * Constructor which creates a usable instance
     
    5255     */
    5356    ClientTokenHolder(const Utf8Str &strTokenId);
     57#else /* VBOX_WITH_GENERIC_SESSION_WATCHER */
     58    /**
     59     * Constructor which creates a usable instance
     60     *
     61     * @param aToken        Reference to token object
     62     */
     63    ClientTokenHolder(IToken *aToken);
     64#endif /* VBOX_WITH_GENERIC_SESSION_WATCHER */
    5465
    5566    /**
     
    6980    ClientTokenHolder();
    7081
     82#ifndef VBOX_WITH_GENERIC_SESSION_WATCHER
    7183    Utf8Str mClientTokenId;
     84#else /* VBOX_WITH_GENERIC_SESSION_WATCHER */
     85    ComPtr<IToken> mToken;
     86#endif /* VBOX_WITH_GENERIC_SESSION_WATCHER */
     87#ifdef CTHSEMTYPE
    7288    CTHSEMTYPE mSem;
     89#endif
     90#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
    7391    RTTHREAD mThread;
     92#endif
    7493#ifdef RT_OS_WINDOWS
    7594    CTHTHREADSEMTYPE mThreadSem;
  • trunk/src/VBox/Main/include/ClientWatcher.h

    r47561 r48431  
    33/** @file
    44 *
    5  * VirtualBox API client watcher
     5 * VirtualBox API client session watcher
    66 */
    77
     
    3333# define CWUPDATEREQARG NIL_RTSEMEVENT
    3434# define CWUPDATEREQTYPE RTSEMEVENT
    35 #elif defined(VBOX_WITH_SYS_V_IPC_SESSION_WATCHER)
    36 # define CWUPDATEREQARG
     35#elif defined(VBOX_WITH_SYS_V_IPC_SESSION_WATCHER) || defined(VBOX_WITH_GENERIC_SESSION_WATCHER)
     36# define CWUPDATEREQARG NIL_RTSEMEVENT
    3737# define CWUPDATEREQTYPE RTSEMEVENT
    3838#else
     
    8080    ProcessList mProcesses;
    8181
    82 #ifdef VBOX_WITH_SYS_V_IPC_SESSION_WATCHER
     82#if defined(VBOX_WITH_SYS_V_IPC_SESSION_WATCHER) || defined(VBOX_WITH_GENERIC_SESSION_WATCHER)
    8383    uint8_t mUpdateAdaptCtr;
    8484#endif
  • trunk/src/VBox/Main/include/MachineImpl.h

    r48406 r48431  
    788788    { return isSessionOpen(aMachine, aControl, true /* aAllowClosing */); }
    789789
     790#ifndef VBOX_WITH_GENERIC_SESSION_WATCHER
    790791    bool checkForSpawnFailure();
     792#endif /* !VBOX_WITH_GENERIC_SESSION_WATCHER */
    791793
    792794    HRESULT prepareRegister();
     
    10341036    void FinalRelease();
    10351037
     1038    struct Uninit
     1039    {
     1040        enum Reason { Unexpected, Abnormal, Normal };
     1041    };
     1042
    10361043    // public initializer/uninitializer for internal purposes only
    10371044    HRESULT init(Machine *aMachine);
    10381045    void uninit() { uninit(Uninit::Unexpected); }
     1046    void uninit(Uninit::Reason aReason);
     1047
    10391048
    10401049    // util::Lockable interface
     
    10961105    }
    10971106
     1107#ifndef VBOX_WITH_GENERIC_SESSION_WATCHER
    10981108    bool checkForDeath();
    10991109
    11001110    void getTokenId(Utf8Str &strTokenId);
     1111#else /* VBOX_WITH_GENERIC_SESSION_WATCHER */
     1112    IToken *getToken();
     1113#endif /* VBOX_WITH_GENERIC_SESSION_WATCHER */
    11011114    // getClientToken must be only used by callers who can guarantee that
    11021115    // the object cannot be deleted in the mean time, i.e. have a caller/lock.
     
    11521165    };
    11531166
    1154     struct Uninit
    1155     {
    1156         enum Reason { Unexpected, Abnormal, Normal };
    1157     };
    1158 
    11591167    struct SnapshotTask;
    11601168    struct DeleteSnapshotTask;
     
    11631171    friend struct DeleteSnapshotTask;
    11641172    friend struct RestoreSnapshotTask;
    1165 
    1166     void uninit(Uninit::Reason aReason);
    11671173
    11681174    HRESULT endSavingState(HRESULT aRC, const Utf8Str &aErrMsg);
  • trunk/src/VBox/Main/include/SessionImpl.h

    r48297 r48431  
    7272    STDMETHOD(GetPID)(ULONG *aPid);
    7373    STDMETHOD(GetRemoteConsole)(IConsole **aConsole);
     74#ifndef VBOX_WITH_GENERIC_SESSION_WATCHER
    7475    STDMETHOD(AssignMachine)(IMachine *aMachine, LockType_T aLockType, IN_BSTR aTokenId);
     76#else /* VBOX_WITH_GENERIC_SESSION_WATCHER */
     77    STDMETHOD(AssignMachine)(IMachine *aMachine, LockType_T aLockType, IToken *aToken);
     78#endif /* VBOX_WITH_GENERIC_SESSION_WATCHER */
    7579    STDMETHOD(AssignRemoteMachine)(IMachine *aMachine, IConsole *aConsole);
    7680    STDMETHOD(UpdateMachineState)(MachineState_T aMachineState);
  • trunk/src/VBox/Main/include/TokenImpl.h

    r48297 r48431  
    4040    // public initializer/uninitializer for internal purposes only
    4141    HRESULT init(const ComObjPtr<SessionMachine> &pSessionMachine);
    42     void uninit();
     42    void uninit(bool fAbandon);
    4343
    4444private:
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