VirtualBox

Changeset 71560 in vbox


Ignore:
Timestamp:
Mar 29, 2018 11:00:30 AM (7 years ago)
Author:
vboxsync
Message:

Guest Control/Main: Added more AutoCaller checks for public APIs.

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

Legend:

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

    r71406 r71560  
    372372#else /* VBOX_WITH_GUEST_CONTROL */
    373373
    374     LogFlowFuncEnter();
     374    AutoCaller autoCaller(this);
     375    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    375376
    376377    /* Do not allow anonymous sessions (with system rights) with public API. */
    377378    if (RT_UNLIKELY(!aUser.length()))
    378379        return setError(E_INVALIDARG, tr("No user name specified"));
     380
     381    LogFlowFuncEnter();
    379382
    380383    GuestSessionStartupInfo startupInfo;
  • trunk/src/VBox/Main/src-client/GuestDirectoryImpl.cpp

    r71406 r71560  
    334334HRESULT GuestDirectory::close()
    335335{
    336     LogFlowThisFuncEnter();
    337 
    338336    AutoCaller autoCaller(this);
    339337    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     338
     339    LogFlowThisFuncEnter();
    340340
    341341    HRESULT hr = S_OK;
     
    369369HRESULT GuestDirectory::read(ComPtr<IFsObjInfo> &aObjInfo)
    370370{
    371     LogFlowThisFuncEnter();
    372 
    373371    AutoCaller autoCaller(this);
    374372    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     373
     374    LogFlowThisFuncEnter();
    375375
    376376    HRESULT hr = S_OK;
  • trunk/src/VBox/Main/src-client/GuestFileImpl.cpp

    r71406 r71560  
    11771177HRESULT GuestFile::close()
    11781178{
     1179    AutoCaller autoCaller(this);
     1180    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     1181
    11791182    LogFlowThisFuncEnter();
    11801183
     
    12171220HRESULT GuestFile::read(ULONG aToRead, ULONG aTimeoutMS, std::vector<BYTE> &aData)
    12181221{
     1222    AutoCaller autoCaller(this);
     1223    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     1224
    12191225    if (aToRead == 0)
    12201226        return setError(E_INVALIDARG, tr("The size to read is zero"));
     1227
     1228    LogFlowThisFuncEnter();
    12211229
    12221230    aData.resize(aToRead);
     
    12531261
    12541262{
     1263    AutoCaller autoCaller(this);
     1264    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     1265
    12551266    if (aToRead == 0)
    12561267        return setError(E_INVALIDARG, tr("The size to read is zero"));
     1268
     1269    LogFlowThisFuncEnter();
    12571270
    12581271    aData.resize(aToRead);
     
    12881301HRESULT GuestFile::seek(LONG64 aOffset, FileSeekOrigin_T aWhence, LONG64 *aNewOffset)
    12891302{
    1290     LogFlowThisFuncEnter();
     1303    AutoCaller autoCaller(this);
     1304    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    12911305
    12921306    HRESULT hr = S_OK;
     
    13111325            break; /* Never reached. */
    13121326    }
     1327
     1328    LogFlowThisFuncEnter();
    13131329
    13141330    uint64_t uNewOffset;
     
    13471363HRESULT GuestFile::write(const std::vector<BYTE> &aData, ULONG aTimeoutMS, ULONG *aWritten)
    13481364{
     1365    AutoCaller autoCaller(this);
     1366    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     1367
    13491368    LogFlowThisFuncEnter();
    13501369
     
    13531372    uint32_t cbData = (uint32_t)aData.size();
    13541373    void *pvData = cbData > 0? (void *)&aData.front(): NULL;
    1355     int vrc = i_writeData(aTimeoutMS, pvData, cbData,
    1356                           (uint32_t*)aWritten);
     1374    int vrc = i_writeData(aTimeoutMS, pvData, cbData, (uint32_t*)aWritten);
    13571375    if (RT_FAILURE(vrc))
    13581376    {
     
    13741392
    13751393{
     1394    AutoCaller autoCaller(this);
     1395    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     1396
    13761397    LogFlowThisFuncEnter();
    13771398
     
    13801401    uint32_t cbData = (uint32_t)aData.size();
    13811402    void *pvData = cbData > 0? (void *)&aData.front(): NULL;
    1382     int vrc = i_writeData(aTimeoutMS, pvData, cbData,
    1383                           (uint32_t*)aWritten);
     1403    int vrc = i_writeData(aTimeoutMS, pvData, cbData, (uint32_t*)aWritten);
    13841404    if (RT_FAILURE(vrc))
    13851405    {
  • trunk/src/VBox/Main/src-client/GuestProcessImpl.cpp

    r71518 r71560  
    17581758HRESULT GuestProcess::read(ULONG aHandle, ULONG aToRead, ULONG aTimeoutMS, std::vector<BYTE> &aData)
    17591759{
    1760     LogFlowThisFuncEnter();
     1760    AutoCaller autoCaller(this);
     1761    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    17611762
    17621763    if (aToRead == 0)
    17631764        return setError(E_INVALIDARG, tr("The size to read is zero"));
     1765
     1766    LogFlowThisFuncEnter();
    17641767
    17651768    aData.resize(aToRead);
     
    18001803HRESULT GuestProcess::terminate()
    18011804{
     1805    AutoCaller autoCaller(this);
     1806    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     1807
     1808    LogFlowThisFuncEnter();
     1809
    18021810    HRESULT hr = S_OK;
    18031811
     
    18371845}
    18381846
    1839 HRESULT GuestProcess::waitFor(ULONG aWaitFor,
    1840                               ULONG aTimeoutMS,
    1841                               ProcessWaitResult_T *aReason)
    1842 {
     1847HRESULT GuestProcess::waitFor(ULONG aWaitFor, ULONG aTimeoutMS, ProcessWaitResult_T *aReason)
     1848{
     1849    AutoCaller autoCaller(this);
     1850    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     1851
     1852    LogFlowThisFuncEnter();
     1853
    18431854    /*
    18441855     * Note: Do not hold any locks here while waiting!
     
    18801891                                   ULONG aTimeoutMS, ProcessWaitResult_T *aReason)
    18811892{
    1882     /*
    1883      * Note: Do not hold any locks here while waiting!
    1884      */
    18851893    uint32_t fWaitFor = ProcessWaitForFlag_None;
    18861894    for (size_t i = 0; i < aWaitFor.size(); i++)
     
    18931901                            ULONG aTimeoutMS, ULONG *aWritten)
    18941902{
     1903    AutoCaller autoCaller(this);
     1904    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     1905
    18951906    LogFlowThisFuncEnter();
    18961907
     
    19301941    LogFlowThisFuncEnter();
    19311942
    1932     /*
    1933      * Note: Do not hold any locks here while writing!
    1934      */
    19351943    ULONG fWrite = ProcessInputFlag_None;
    19361944    for (size_t i = 0; i < aFlags.size(); i++)
  • trunk/src/VBox/Main/src-client/GuestSessionImpl.cpp

    r71542 r71560  
    25182518HRESULT GuestSession::close()
    25192519{
    2520     LogFlowThisFuncEnter();
    2521 
    25222520    AutoCaller autoCaller(this);
    25232521    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     2522
     2523    LogFlowThisFuncEnter();
    25242524
    25252525    HRESULT hr = i_isReadyExternal();
     
    25662566                                        ComPtr<IProgress> &aProgress)
    25672567{
    2568     LogFlowThisFuncEnter();
     2568    AutoCaller autoCaller(this);
     2569    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    25692570
    25702571    if (RT_UNLIKELY((aSource.c_str()) == NULL || *(aSource.c_str()) == '\0'))
     
    25872588        return hrc;
    25882589
     2590    LogFlowThisFuncEnter();
     2591
    25892592    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
    25902593
     
    26432646                                      const std::vector<FileCopyFlag_T> &aFlags, ComPtr<IProgress> &aProgress)
    26442647{
    2645     LogFlowThisFuncEnter();
     2648    AutoCaller autoCaller(this);
     2649    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    26462650
    26472651    if (RT_UNLIKELY((aSource.c_str()) == NULL || *(aSource.c_str()) == '\0'))
     
    26642668        return hrc;
    26652669
     2670    LogFlowThisFuncEnter();
     2671
    26662672    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
    26672673
     
    27252731                                             const std::vector<DirectoryCopyFlag_T> &aFlags, ComPtr<IProgress> &aProgress)
    27262732{
    2727     LogFlowThisFuncEnter();
     2733    AutoCaller autoCaller(this);
     2734    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    27282735
    27292736    if (RT_UNLIKELY((aSource.c_str()) == NULL || *(aSource.c_str()) == '\0'))
     
    27492756    if (FAILED(hrc))
    27502757        return hrc;
     2758
     2759    LogFlowThisFuncEnter();
    27512760
    27522761    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
     
    28062815                                           const std::vector<DirectoryCopyFlag_T> &aFlags, ComPtr<IProgress> &aProgress)
    28072816{
    2808     LogFlowThisFuncEnter();
     2817    AutoCaller autoCaller(this);
     2818    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    28092819
    28102820    if (RT_UNLIKELY((aSource.c_str()) == NULL || *(aSource.c_str()) == '\0'))
     
    28332843    if (FAILED(hrc))
    28342844        return hrc;
     2845
     2846    LogFlowThisFuncEnter();
    28352847
    28362848    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
     
    28902902                                      const std::vector<DirectoryCreateFlag_T> &aFlags)
    28912903{
    2892     LogFlowThisFuncEnter();
     2904    AutoCaller autoCaller(this);
     2905    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    28932906
    28942907    if (RT_UNLIKELY((aPath.c_str()) == NULL || *(aPath.c_str()) == '\0'))
     
    29092922    if (FAILED(hrc))
    29102923        return hrc;
     2924
     2925    LogFlowThisFuncEnter();
    29112926
    29122927    ComObjPtr <GuestDirectory> pDirectory; int rcGuest;
     
    29452960{
    29462961    RT_NOREF(aMode, aSecure);
    2947     LogFlowThisFuncEnter();
     2962
     2963    AutoCaller autoCaller(this);
     2964    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    29482965
    29492966    if (RT_UNLIKELY((aTemplateName.c_str()) == NULL || *(aTemplateName.c_str()) == '\0'))
     
    29562973        return hrc;
    29572974
     2975    LogFlowThisFuncEnter();
     2976
    29582977    int rcGuest;
    29592978    int rc = i_fsCreateTemp(aTemplateName, aPath, true /* Directory */, aDirectory, &rcGuest);
     
    29782997HRESULT GuestSession::directoryExists(const com::Utf8Str &aPath, BOOL aFollowSymlinks, BOOL *aExists)
    29792998{
    2980     LogFlowThisFuncEnter();
     2999    AutoCaller autoCaller(this);
     3000    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    29813001
    29823002    if (RT_UNLIKELY((aPath.c_str()) == NULL || *(aPath.c_str()) == '\0'))
     
    29863006    if (FAILED(hrc))
    29873007        return hrc;
     3008
     3009    LogFlowThisFuncEnter();
    29883010
    29893011    GuestFsObjData objData; int rcGuest;
     
    30233045                                    const std::vector<DirectoryOpenFlag_T> &aFlags, ComPtr<IGuestDirectory> &aDirectory)
    30243046{
    3025     LogFlowThisFuncEnter();
     3047    AutoCaller autoCaller(this);
     3048    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    30263049
    30273050    if (RT_UNLIKELY((aPath.c_str()) == NULL || *(aPath.c_str()) == '\0'))
     
    30443067        return hrc;
    30453068
     3069    LogFlowThisFuncEnter();
     3070
    30463071    GuestDirectoryOpenInfo openInfo;
    30473072    openInfo.mPath = aPath;
     
    30813106HRESULT GuestSession::directoryRemove(const com::Utf8Str &aPath)
    30823107{
    3083     LogFlowThisFuncEnter();
     3108    AutoCaller autoCaller(this);
     3109    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    30843110
    30853111    if (RT_UNLIKELY((aPath.c_str()) == NULL || *(aPath.c_str()) == '\0'))
     
    30893115    if (FAILED(hrc))
    30903116        return hrc;
     3117
     3118    LogFlowThisFuncEnter();
    30913119
    30923120    /* No flags; only remove the directory when empty. */
     
    31223150{
    31233151    RT_NOREF(aFlags);
    3124     LogFlowThisFuncEnter();
     3152
     3153    AutoCaller autoCaller(this);
     3154    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    31253155
    31263156    if (RT_UNLIKELY((aPath.c_str()) == NULL || *(aPath.c_str()) == '\0'))
     
    31333163    if (FAILED(hrc))
    31343164        return hrc;
     3165
     3166    LogFlowThisFuncEnter();
    31353167
    31363168    ComObjPtr<Progress> pProgress;
     
    31853217HRESULT GuestSession::environmentScheduleSet(const com::Utf8Str &aName, const com::Utf8Str &aValue)
    31863218{
    3187     LogFlowThisFuncEnter();
     3219    AutoCaller autoCaller(this);
     3220    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    31883221
    31893222    HRESULT hrc;
     
    31923225        if (RT_LIKELY(strchr(aName.c_str(), '=') == NULL))
    31933226        {
     3227            LogFlowThisFuncEnter();
     3228
    31943229            AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
    31953230            int vrc = mData.mEnvironmentChanges.setVariable(aName, aValue);
     
    32113246HRESULT GuestSession::environmentScheduleUnset(const com::Utf8Str &aName)
    32123247{
    3213     LogFlowThisFuncEnter();
     3248    AutoCaller autoCaller(this);
     3249    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     3250
    32143251    HRESULT hrc;
    32153252    if (RT_LIKELY(aName.isNotEmpty()))
     
    32173254        if (RT_LIKELY(strchr(aName.c_str(), '=') == NULL))
    32183255        {
     3256            LogFlowThisFuncEnter();
     3257
    32193258            AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
    32203259            int vrc = mData.mEnvironmentChanges.unsetVariable(aName);
     
    32363275HRESULT GuestSession::environmentGetBaseVariable(const com::Utf8Str &aName, com::Utf8Str &aValue)
    32373276{
    3238     LogFlowThisFuncEnter();
     3277    AutoCaller autoCaller(this);
     3278    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     3279
    32393280    HRESULT hrc;
    32403281    if (RT_LIKELY(aName.isNotEmpty()))
     
    32423283        if (RT_LIKELY(strchr(aName.c_str(), '=') == NULL))
    32433284        {
     3285            LogFlowThisFuncEnter();
     3286
    32443287            AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
    32453288            if (mData.mpBaseEnvironment)
     
    32683311HRESULT GuestSession::environmentDoesBaseVariableExist(const com::Utf8Str &aName, BOOL *aExists)
    32693312{
    3270     LogFlowThisFuncEnter();
     3313    AutoCaller autoCaller(this);
     3314    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     3315
    32713316    *aExists = FALSE;
     3317
    32723318    HRESULT hrc;
    32733319    if (RT_LIKELY(aName.isNotEmpty()))
     
    32753321        if (RT_LIKELY(strchr(aName.c_str(), '=') == NULL))
    32763322        {
     3323            LogFlowThisFuncEnter();
     3324
    32773325            AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
    32783326            if (mData.mpBaseEnvironment)
     
    33053353HRESULT GuestSession::fileExists(const com::Utf8Str &aPath, BOOL aFollowSymlinks, BOOL *aExists)
    33063354{
    3307     LogFlowThisFuncEnter();
     3355    AutoCaller autoCaller(this);
     3356    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    33083357
    33093358    if (RT_UNLIKELY((aPath.c_str()) == NULL || *(aPath.c_str()) == '\0'))
     
    33163365    if (FAILED(hrc))
    33173366        return hrc;
     3367
     3368    LogFlowThisFuncEnter();
    33183369
    33193370    GuestFsObjData objData; int rcGuest;
     
    33503401{
    33513402    LogFlowThisFuncEnter();
     3403
    33523404    const std::vector<FileOpenExFlag_T> EmptyFlags;
    33533405    return fileOpenEx(aPath, aAccessMode, aOpenAction, FileSharingMode_All, aCreationMode, EmptyFlags, aFile);
     
    33583410                                 const std::vector<FileOpenExFlag_T> &aFlags, ComPtr<IGuestFile> &aFile)
    33593411{
    3360     LogFlowThisFuncEnter();
     3412    AutoCaller autoCaller(this);
     3413    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    33613414
    33623415    if (RT_UNLIKELY((aPath.c_str()) == NULL || *(aPath.c_str()) == '\0'))
     
    33663419    if (FAILED(hrc))
    33673420        return hrc;
     3421
     3422    LogFlowThisFuncEnter();
    33683423
    33693424    GuestFileOpenInfo openInfo;
     
    34583513HRESULT GuestSession::fileQuerySize(const com::Utf8Str &aPath, BOOL aFollowSymlinks, LONG64 *aSize)
    34593514{
     3515    AutoCaller autoCaller(this);
     3516    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     3517
    34603518    if (aPath.isEmpty())
    34613519        return setError(E_INVALIDARG, tr("No path specified"));
     
    34863544HRESULT GuestSession::fsObjExists(const com::Utf8Str &aPath, BOOL aFollowSymlinks, BOOL *aExists)
    34873545{
     3546    AutoCaller autoCaller(this);
     3547    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     3548
    34883549    if (aPath.isEmpty())
    34893550        return setError(E_INVALIDARG, tr("No path specified"));
     
    35273588HRESULT GuestSession::fsObjQueryInfo(const com::Utf8Str &aPath, BOOL aFollowSymlinks, ComPtr<IGuestFsObjInfo> &aInfo)
    35283589{
     3590    AutoCaller autoCaller(this);
     3591    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     3592
    35293593    if (aPath.isEmpty())
    35303594        return setError(E_INVALIDARG, tr("No path specified"));
     
    35663630HRESULT GuestSession::fsObjRemove(const com::Utf8Str &aPath)
    35673631{
     3632    AutoCaller autoCaller(this);
     3633    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     3634
    35683635    if (RT_UNLIKELY(aPath.isEmpty()))
    35693636        return setError(E_INVALIDARG, tr("No path specified"));
     
    35943661                                  const std::vector<FsObjRenameFlag_T> &aFlags)
    35953662{
     3663    AutoCaller autoCaller(this);
     3664    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     3665
    35963666    if (RT_UNLIKELY(aSource.isEmpty()))
    35973667        return setError(E_INVALIDARG, tr("No source path specified"));
     
    35993669    if (RT_UNLIKELY(aDestination.isEmpty()))
    36003670        return setError(E_INVALIDARG, tr("No destination path specified"));
    3601 
    3602     LogFlowThisFunc(("aSource=%s, aDestination=%s\n", aSource.c_str(), aDestination.c_str()));
    36033671
    36043672    HRESULT hrc = i_isReadyExternal();
     
    36123680    if (fApiFlags & ~((uint32_t)FsObjRenameFlag_NoReplace | (uint32_t)FsObjRenameFlag_Replace))
    36133681        return setError(E_INVALIDARG, tr("Unknown rename flag: %#x"), fApiFlags);
     3682
     3683    LogFlowThisFunc(("aSource=%s, aDestination=%s\n", aSource.c_str(), aDestination.c_str()));
    36143684
    36153685    AssertCompile(FsObjRenameFlag_NoReplace == 0);
     
    36703740
    36713741    std::vector<LONG> affinityIgnored;
    3672 
    36733742    return processCreateEx(aExecutable, aArguments, aEnvironment, aFlags, aTimeoutMS, ProcessPriority_Default,
    36743743                           affinityIgnored, aGuestProcess);
     
    36813750                                      ComPtr<IGuestProcess> &aGuestProcess)
    36823751{
    3683     LogFlowThisFuncEnter();
     3752    AutoCaller autoCaller(this);
     3753    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     3754
     3755    HRESULT hr = i_isReadyExternal();
     3756    if (FAILED(hr))
     3757        return hr;
    36843758
    36853759    /** @todo r=bird: Check input better? aPriority is passed on to the guest
     
    37013775    }
    37023776
    3703     /*
    3704      * Check the session.
    3705      */
    3706     HRESULT hr = i_isReadyExternal();
    3707     if (FAILED(hr))
    3708         return hr;
     3777    LogFlowThisFuncEnter();
    37093778
    37103779    /*
     
    37843853
    37853854{
    3786     LogFlowThisFunc(("PID=%RU32\n", aPid));
     3855    AutoCaller autoCaller(this);
     3856    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    37873857
    37883858    if (aPid == 0)
    37893859        return setError(E_INVALIDARG, tr("No valid process ID (PID) specified"));
     3860
     3861    LogFlowThisFunc(("PID=%RU32\n", aPid));
    37903862
    37913863    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
     
    38293901HRESULT GuestSession::waitFor(ULONG aWaitFor, ULONG aTimeoutMS, GuestSessionWaitResult_T *aReason)
    38303902{
     3903    AutoCaller autoCaller(this);
     3904    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     3905
     3906    /* Note: No call to i_isReadyExternal() needed here, as the session might not has been started (yet). */
     3907
    38313908    LogFlowThisFuncEnter();
    38323909
    3833     HRESULT hrc = i_isReadyExternal();
    3834     if (FAILED(hrc))
    3835         return hrc;
     3910    HRESULT hrc = S_OK;
    38363911
    38373912    /*
     
    38723947                                   GuestSessionWaitResult_T *aReason)
    38733948{
     3949    AutoCaller autoCaller(this);
     3950    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     3951
     3952    /* Note: No call to i_isReadyExternal() needed here, as the session might not has been started (yet). */
     3953
    38743954    LogFlowThisFuncEnter();
    3875 
    3876     HRESULT hrc = i_isReadyExternal();
    3877     if (FAILED(hrc))
    3878         return hrc;
    38793955
    38803956    /*
     
    38873963    return WaitFor(fWaitFor, aTimeoutMS, aReason);
    38883964}
    3889 
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