VirtualBox

Changeset 58521 in vbox for trunk


Ignore:
Timestamp:
Oct 30, 2015 9:03:19 AM (9 years ago)
Author:
vboxsync
Message:

pr7179. GuestSession, GuestProcess, GuestControl classes have been modified.

Location:
trunk/src/VBox/Main
Files:
6 edited

Legend:

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

    r55591 r58521  
    167167        }
    168168    } mData;
     169
     170    friend class GuestProcessStartTask;
    169171};
    170172
     
    224226    GuestProcessStream          mStdOut;
    225227    GuestProcessStream          mStdErr;
     228
    226229};
    227230
  • trunk/src/VBox/Main/include/GuestSessionImpl.h

    r57425 r58521  
    2727#include "GuestFileImpl.h"
    2828#include "GuestFsObjInfoImpl.h"
     29#include "ThreadTask.h"
    2930
    3031#include <iprt/isofs.h> /* For UpdateAdditions. */
     
    3637 * runs in a Main worker thread.
    3738 */
    38 class GuestSessionTask
     39class GuestSessionTask : public ThreadTask
    3940{
    4041public:
     
    4849    virtual int Run(void) = 0;
    4950    virtual int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress) = 0;
     51
     52    HRESULT Init(const Utf8Str &strTaskDesc)
     53    {
     54        HRESULT hr = S_OK;
     55        setTaskDesc(strTaskDesc);
     56        hr = createAndSetProgressObject();
     57        return hr;
     58    }
     59
     60    ComObjPtr<Progress> GetProgressObject() const;
    5061
    5162protected:
     
    5667    int setProgressSuccess(void);
    5768    HRESULT setProgressErrorMsg(HRESULT hr, const Utf8Str &strMsg);
    58 
     69    inline void setTaskDesc(const Utf8Str &strTaskDesc) throw()
     70    {
     71        mDesc = strTaskDesc;
     72    }
     73
     74    HRESULT createAndSetProgressObject();
    5975protected:
    6076
     
    84100    int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress);
    85101    static DECLCALLBACK(int) taskThread(RTTHREAD Thread, void *pvUser);
     102    void handler()
     103    {
     104        int vrc = SessionTaskOpen::taskThread(NULL, this);
     105    }
    86106
    87107protected:
     
    114134    int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress);
    115135    static DECLCALLBACK(int) taskThread(RTTHREAD Thread, void *pvUser);
     136    void handler()
     137    {
     138        int vrc = SessionTaskCopyTo::taskThread(NULL, this);
     139    }
    116140
    117141protected:
     
    142166    int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress);
    143167    static DECLCALLBACK(int) taskThread(RTTHREAD Thread, void *pvUser);
     168    void handler()
     169    {
     170        int vrc = SessionTaskCopyFrom::taskThread(NULL, this);
     171    }
    144172
    145173protected:
     
    168196    int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress);
    169197    static DECLCALLBACK(int) taskThread(RTTHREAD Thread, void *pvUser);
     198    void handler()
     199    {
     200        int vrc = SessionTaskUpdateAdditions::taskThread(NULL, this);
     201    }
    170202
    171203protected:
  • trunk/src/VBox/Main/src-client/GuestCtrlImpl.cpp

    r56030 r58521  
    559559        else
    560560        {
     561
     562            ComObjPtr<Progress> pProgress;
     563            SessionTaskUpdateAdditions *pTask = NULL;
    561564            try
    562565            {
    563                 ComObjPtr<Progress> pProgress;
    564                 SessionTaskUpdateAdditions *pTask = new SessionTaskUpdateAdditions(pSession /* GuestSession */,
    565                                                                                    aSource, aArgs, fFlags);
    566                 rc = pSession->i_startTaskAsync(tr("Updating Guest Additions"), pTask, pProgress);
    567                 if (RT_SUCCESS(rc))
     566                try
     567                {
     568                    pTask = new SessionTaskUpdateAdditions(pSession /* GuestSession */, aSource, aArgs, fFlags);
     569                }
     570                catch(...)
     571                {
     572                    hr = setError(VBOX_E_IPRT_ERROR, tr("Failed to create SessionTaskUpdateAdditions object "));
     573                    throw;
     574                }
     575
     576
     577                hr = pTask->Init(Utf8StrFmt(tr("Updating Guest Additions")));
     578                if (FAILED(hr))
     579                {
     580                    delete pTask;
     581                    hr = setError(VBOX_E_IPRT_ERROR,
     582                                  tr("Creating progress object for SessionTaskUpdateAdditions object failed"));
     583                    throw hr;
     584                }
     585
     586                hr = pTask->createThread(NULL, RTTHREADTYPE_MAIN_HEAVY_WORKER);
     587
     588                if (SUCCEEDED(hr))
    568589                {
    569590                    /* Return progress to the caller. */
     591                    pProgress = pTask->GetProgressObject();
    570592                    hr = pProgress.queryInterfaceTo(aProgress.asOutParam());
    571593                }
    572594                else
    573595                    hr = setError(VBOX_E_IPRT_ERROR,
    574                                   tr("Starting task for updating Guest Additions on the guest failed: %Rrc"), rc);
     596                                  tr("Starting thread for updating Guest Additions on the guest failed "));
    575597            }
    576598            catch(std::bad_alloc &)
     
    578600                hr = E_OUTOFMEMORY;
    579601            }
     602            catch(HRESULT eHR)
     603            {
     604                LogFlowThisFunc(("Exception was caught in the function \n"));
     605            }
    580606        }
    581607    }
  • trunk/src/VBox/Main/src-client/GuestProcessImpl.cpp

    r57948 r58521  
    4141#include "AutoCaller.h"
    4242#include "VBoxEvents.h"
     43#include "ThreadTask.h"
    4344
    4445#include <memory> /* For auto_ptr. */
     
    5960
    6061
    61 class GuestProcessTask
     62class GuestProcessTask : public ThreadTask
    6263{
    6364public:
     
    8485
    8586    GuestProcessStartTask(GuestProcess *pProcess)
    86         : GuestProcessTask(pProcess) { }
     87        : GuestProcessTask(pProcess)
     88    {
     89        m_strTaskName = "gctlPrcStart";
     90    }
     91
     92    void handler()
     93    {
     94        int vrc = GuestProcess::i_startProcessThread(NULL, this);
     95    }
    8796};
    8897
     
    11281137
    11291138    int vrc;
    1130 
     1139    HRESULT hr = S_OK;
     1140
     1141    GuestProcessStartTask* pTask = NULL;
    11311142    try
    11321143    {
    1133         /* Asynchronously start the process on the guest by kicking off a
    1134          * worker thread. */
    1135         std::auto_ptr<GuestProcessStartTask> pTask(new GuestProcessStartTask(this));
    1136         AssertReturn(pTask->i_isOk(), pTask->i_rc());
    1137 
    1138         vrc = RTThreadCreate(NULL, GuestProcess::i_startProcessThread,
    1139                              (void *)pTask.get(), 0,
    1140                              RTTHREADTYPE_MAIN_WORKER, 0,
    1141                              "gctlPrcStart");
    1142         if (RT_SUCCESS(vrc))
    1143         {
    1144             /* pTask is now owned by startProcessThread(), so release it. */
    1145             pTask.release();
    1146         }
     1144        pTask = new GuestProcessStartTask(this);
     1145        if (!pTask->i_isOk())
     1146        {
     1147            delete pTask;
     1148            LogRel2(("GuestProcess: Could not create GuestProcessStartTask object \n"));
     1149            throw hr = E_FAIL;
     1150        }
     1151
     1152        //this function delete pTask in case of exceptions, so there is no need in the call of delete operator
     1153        hr = pTask->createThread();
    11471154    }
    11481155    catch(std::bad_alloc &)
    11491156    {
    11501157        vrc = VERR_NO_MEMORY;
     1158    }
     1159    catch(...)
     1160    {
     1161        LogRel2(("GuestProcess: Could not create thread for GuestProcessStartTask task \n"));
     1162        if (hr == E_FAIL)
     1163            vrc = VERR_NO_MEMORY;
    11511164    }
    11521165
     
    11601173    LogFlowFunc(("pvUser=%p\n", pvUser));
    11611174
    1162     std::auto_ptr<GuestProcessStartTask> pTask(static_cast<GuestProcessStartTask*>(pvUser));
    1163     AssertPtr(pTask.get());
     1175    GuestProcessStartTask* pTask = static_cast<GuestProcessStartTask*>(pvUser);
    11641176
    11651177    const ComObjPtr<GuestProcess> pProcess(pTask->i_process());
  • trunk/src/VBox/Main/src-client/GuestSessionImpl.cpp

    r57948 r58521  
    3333#include "VBoxEvents.h"
    3434#include "VMMDev.h"
     35#include "ThreadTask.h"
    3536
    3637#include <memory> /* For auto_ptr. */
     
    5556 * asynchronous session task.
    5657 */
    57 class GuestSessionTaskInternal
     58class GuestSessionTaskInternal : public ThreadTask
    5859{
    5960public:
    6061
    6162    GuestSessionTaskInternal(GuestSession *pSession)
    62         : mSession(pSession),
    63           mRC(VINF_SUCCESS) { }
     63        : ThreadTask("GenericGuestSessionTaskInternal")
     64        , mSession(pSession)
     65        , mRC(VINF_SUCCESS) { }
    6466
    6567    virtual ~GuestSessionTaskInternal(void) { }
     
    8385
    8486    GuestSessionTaskInternalOpen(GuestSession *pSession)
    85         : GuestSessionTaskInternal(pSession) { }
     87        : GuestSessionTaskInternal(pSession)
     88    {
     89        m_strTaskName = "gctlSesStart";
     90    }
     91
     92    void handler()
     93    {
     94        int vrc = GuestSession::i_startSessionThread(NULL, this);
     95    }
    8696};
    8797
     
    17091719    LogFlowThisFuncEnter();
    17101720
     1721    HRESULT hr = S_OK;
    17111722    int vrc;
    17121723
     1724    GuestSessionTaskInternalOpen* pTask = NULL;
    17131725    try
    17141726    {
     1727        pTask = new GuestSessionTaskInternalOpen(this);
     1728        if (!pTask->isOk())
     1729        {
     1730            delete pTask;
     1731            LogRel2(("GuestSession: Could not create GuestSessionTaskInternalOpen object \n"));
     1732            throw hr = E_FAIL;
     1733        }
     1734
    17151735        /* Asynchronously open the session on the guest by kicking off a
    17161736         * worker thread. */
    1717         std::auto_ptr<GuestSessionTaskInternalOpen> pTask(new GuestSessionTaskInternalOpen(this));
    1718         AssertReturn(pTask->isOk(), pTask->rc());
    1719 
    1720         vrc = RTThreadCreate(NULL, GuestSession::i_startSessionThread,
    1721                              (void *)pTask.get(), 0,
    1722                              RTTHREADTYPE_MAIN_WORKER, 0,
    1723                              "gctlSesStart");
    1724         if (RT_SUCCESS(vrc))
    1725         {
    1726             /* pTask is now owned by openSessionThread(), so release it. */
    1727             pTask.release();
    1728         }
     1737        //this function delete pTask in case of exceptions, so there is no need in the call of delete operator
     1738        hr = pTask->createThread();
     1739
    17291740    }
    17301741    catch(std::bad_alloc &)
    17311742    {
    17321743        vrc = VERR_NO_MEMORY;
     1744    }
     1745    catch(...)
     1746    {
     1747        LogRel2(("GuestSession: Could not create thread for GuestSessionTaskInternalOpen task \n"));
     1748        if (hr == E_FAIL)
     1749            vrc = VERR_NO_MEMORY;
    17331750    }
    17341751
     
    17421759    LogFlowFunc(("pvUser=%p\n", pvUser));
    17431760
    1744     std::auto_ptr<GuestSessionTaskInternalOpen> pTask(static_cast<GuestSessionTaskInternalOpen*>(pvUser));
    1745     AssertPtr(pTask.get());
     1761
     1762    GuestSessionTaskInternalOpen* pTask = static_cast<GuestSessionTaskInternalOpen*>(pvUser);
     1763    AssertPtr(pTask);
    17461764
    17471765    const ComObjPtr<GuestSession> pSession(pTask->Session());
     
    21282146    /* Initialize our worker task. */
    21292147    std::auto_ptr<GuestSessionTask> task(pTask);
    2130 
    21312148    int rc = task->RunAsync(strTaskDesc, pProgress);
    21322149    if (RT_FAILURE(rc))
     
    24592476    try
    24602477    {
     2478        SessionTaskCopyFrom *pTask = NULL;
    24612479        ComObjPtr<Progress> pProgress;
    2462         SessionTaskCopyFrom *pTask = new SessionTaskCopyFrom(this /* GuestSession */,
    2463                                                              aSource, aDest, fFlags);
    2464         int rc = i_startTaskAsync(Utf8StrFmt(tr("Copying \"%s\" from guest to \"%s\" on the host"), aSource.c_str(),
    2465                                   aDest.c_str()), pTask, pProgress);
    2466         if (RT_SUCCESS(rc))
     2480        try
     2481        {
     2482            pTask = new SessionTaskCopyFrom(this /* GuestSession */, aSource, aDest, fFlags);
     2483        }
     2484        catch(...)
     2485        {
     2486            hr = setError(VBOX_E_IPRT_ERROR, tr("Failed to create SessionTaskCopyFrom object "));
     2487            throw;
     2488        }
     2489
     2490
     2491        hr = pTask->Init(Utf8StrFmt(tr("Copying \"%s\" from guest to \"%s\" on the host"), aSource.c_str(), aDest.c_str()));
     2492        if (FAILED(hr))
     2493        {
     2494            delete pTask;
     2495            hr = setError(VBOX_E_IPRT_ERROR,
     2496                          tr("Creating progress object for SessionTaskCopyFrom object failed"));
     2497            throw hr;
     2498        }
     2499
     2500        hr = pTask->createThread(NULL, RTTHREADTYPE_MAIN_HEAVY_WORKER);
     2501
     2502        if (SUCCEEDED(hr))
     2503        {
    24672504            /* Return progress to the caller. */
     2505            pProgress = pTask->GetProgressObject();
    24682506            hr = pProgress.queryInterfaceTo(aProgress.asOutParam());
     2507        }
    24692508        else
    24702509            hr = setError(VBOX_E_IPRT_ERROR,
    2471                           tr("Starting task for copying file \"%s\" from guest to \"%s\" on the host failed: %Rrc"), rc);
     2510                          tr("Starting thread for copying file \"%s\" from guest to \"%s\" on the host failed "),
     2511                          aSource.c_str(), aDest.c_str());
     2512
    24722513    }
    24732514    catch(std::bad_alloc &)
    24742515    {
    24752516        hr = E_OUTOFMEMORY;
     2517    }
     2518    catch(HRESULT eHR)
     2519    {
     2520        hr = eHR;
     2521        LogFlowThisFunc(("Exception was caught in the function \n"));
    24762522    }
    24772523
     
    25032549    try
    25042550    {
     2551        SessionTaskCopyTo *pTask = NULL;
    25052552        ComObjPtr<Progress> pProgress;
    2506         SessionTaskCopyTo *pTask = new SessionTaskCopyTo(this /* GuestSession */,
    2507                                                          aSource, aDest, fFlags);
    2508         AssertPtrReturn(pTask, E_OUTOFMEMORY);
    2509         int rc = i_startTaskAsync(Utf8StrFmt(tr("Copying \"%s\" from host to \"%s\" on the guest"), aSource.c_str(),
    2510                                   aDest.c_str()), pTask, pProgress);
    2511         if (RT_SUCCESS(rc))
     2553        try
     2554        {
     2555            pTask = new SessionTaskCopyTo(this /* GuestSession */, aSource, aDest, fFlags);
     2556        }
     2557        catch(...)
     2558        {
     2559            hr = setError(VBOX_E_IPRT_ERROR, tr("Failed to create SessionTaskCopyTo object "));
     2560            throw;
     2561        }
     2562
     2563
     2564        hr = pTask->Init(Utf8StrFmt(tr("Copying \"%s\" from host to \"%s\" on the guest"), aSource.c_str(), aDest.c_str()));
     2565        if (FAILED(hr))
     2566        {
     2567            delete pTask;
     2568            hr = setError(VBOX_E_IPRT_ERROR,
     2569                          tr("Creating progress object for SessionTaskCopyTo object failed"));
     2570            throw hr;
     2571        }
     2572
     2573        hr = pTask->createThread(NULL, RTTHREADTYPE_MAIN_HEAVY_WORKER);
     2574
     2575        if (SUCCEEDED(hr))
    25122576        {
    25132577            /* Return progress to the caller. */
     2578            pProgress = pTask->GetProgressObject();
    25142579            hr = pProgress.queryInterfaceTo(aProgress.asOutParam());
    25152580        }
    25162581        else
    25172582            hr = setError(VBOX_E_IPRT_ERROR,
    2518                           tr("Starting task for copying file \"%s\" from host to \"%s\" on the guest failed: %Rrc"), rc);
     2583                          tr("Starting thread for copying file \"%s\" from guest to \"%s\" on the host failed "),
     2584                          aSource.c_str(), aDest.c_str());
    25192585    }
    25202586    catch(std::bad_alloc &)
    25212587    {
    25222588        hr = E_OUTOFMEMORY;
     2589    }
     2590    catch(HRESULT eHR)
     2591    {
     2592        hr = eHR;
     2593        LogFlowThisFunc(("Exception was caught in the function \n"));
    25232594    }
    25242595
  • trunk/src/VBox/Main/src-client/GuestSessionImplTasks.cpp

    r57425 r58521  
    6666/////////////////////////////////////////////////////////////////////////////
    6767
    68 GuestSessionTask::GuestSessionTask(GuestSession *pSession)
     68GuestSessionTask::GuestSessionTask(GuestSession *pSession):ThreadTask("GenericGuestSessionTask")
    6969{
    7070    mSession = pSession;
     
    7373GuestSessionTask::~GuestSessionTask(void)
    7474{
     75}
     76
     77HRESULT GuestSessionTask::createAndSetProgressObject()
     78{
     79    LogFlowThisFunc(("Task Description = %s, pTask=%p\n", mDesc.c_str(), this));
     80
     81    ComObjPtr<Progress> pProgress;
     82    HRESULT hr = S_OK;
     83    /* Create the progress object. */
     84    hr = pProgress.createObject();
     85    if (FAILED(hr))
     86        return VERR_COM_UNEXPECTED;
     87
     88    hr = pProgress->init(static_cast<IGuestSession*>(mSession),
     89                         Bstr(mDesc).raw(),
     90                         TRUE /* aCancelable */);
     91    if (FAILED(hr))
     92        return VERR_COM_UNEXPECTED;
     93
     94    mProgress = pProgress;
     95
     96    LogFlowFuncLeave();
     97
     98    return hr;
     99}
     100
     101ComObjPtr<Progress> GuestSessionTask::GetProgressObject() const
     102{
     103    if(mProgress != NULL)
     104        return mProgress;
     105    else
     106        return NULL;
    75107}
    76108
     
    170202                                   mTimeoutMS(uTimeoutMS)
    171203{
    172 
     204    m_strTaskName = "gctlSesOpen";
    173205}
    174206
     
    212244DECLCALLBACK(int) SessionTaskOpen::taskThread(RTTHREAD Thread, void *pvUser)
    213245{
    214     std::auto_ptr<SessionTaskOpen> task(static_cast<SessionTaskOpen*>(pvUser));
    215     AssertReturn(task.get(), VERR_GENERAL_FAILURE);
    216 
    217     LogFlowFunc(("pTask=%p\n", task.get()));
     246    SessionTaskOpen* task = static_cast<SessionTaskOpen*>(pvUser);
     247    AssertReturn(task, VERR_GENERAL_FAILURE);
     248
     249    LogFlowFunc(("pTask=%p\n", task));
     250
    218251    return task->Run(NULL /* guestRc */);
    219252}
     
    229262{
    230263    mCopyFileFlags = uFlags;
     264    m_strTaskName = "gctlCpyTo";
    231265}
    232266
     
    243277    mDest          = strDest;
    244278    mCopyFileFlags = uFlags;
     279    m_strTaskName = "gctlCpyTo";
    245280}
    246281
     
    572607DECLCALLBACK(int) SessionTaskCopyTo::taskThread(RTTHREAD Thread, void *pvUser)
    573608{
    574     std::auto_ptr<SessionTaskCopyTo> task(static_cast<SessionTaskCopyTo*>(pvUser));
    575     AssertReturn(task.get(), VERR_GENERAL_FAILURE);
    576 
    577     LogFlowFunc(("pTask=%p\n", task.get()));
     609    SessionTaskCopyTo* task = static_cast<SessionTaskCopyTo*>(pvUser);
     610    AssertReturn(task, VERR_GENERAL_FAILURE);
     611
     612    LogFlowFunc(("pTask=%p\n", task));
     613
    578614    return task->Run();
    579615}
     
    586622    mDest   = strDest;
    587623    mFlags  = uFlags;
     624    m_strTaskName = "gctlCpyFrom";
    588625}
    589626
     
    844881DECLCALLBACK(int) SessionTaskCopyFrom::taskThread(RTTHREAD Thread, void *pvUser)
    845882{
    846     std::auto_ptr<SessionTaskCopyFrom> task(static_cast<SessionTaskCopyFrom*>(pvUser));
    847     AssertReturn(task.get(), VERR_GENERAL_FAILURE);
    848 
    849     LogFlowFunc(("pTask=%p\n", task.get()));
     883    SessionTaskCopyFrom* task = static_cast<SessionTaskCopyFrom*>(pvUser);
     884    AssertReturn(task, VERR_GENERAL_FAILURE);
     885
     886    LogFlowFunc(("pTask=%p\n", task));
     887
    850888    return task->Run();
    851889}
     
    860898    mArguments = aArguments;
    861899    mFlags  = uFlags;
     900    m_strTaskName = "gctlUpGA";
    862901}
    863902
     
    930969    rc = RTFileSeek(pISO->file, cbOffset, RTFILE_SEEK_BEGIN, NULL);
    931970
     971    HRESULT hr = S_OK;
    932972    /* Copy over the Guest Additions file to the guest. */
    933973    if (RT_SUCCESS(rc))
     
    938978        if (RT_SUCCESS(rc))
    939979        {
    940             SessionTaskCopyTo *pTask = new SessionTaskCopyTo(pSession /* GuestSession */,
    941                                                              &pISO->file, cbOffset, cbSize,
    942                                                              strFileDest, FileCopyFlag_None);
    943             AssertPtrReturn(pTask, VERR_NO_MEMORY);
    944 
     980            SessionTaskCopyTo *pTask = NULL;
    945981            ComObjPtr<Progress> pProgressCopyTo;
    946             rc = pSession->i_startTaskAsync(Utf8StrFmt(GuestSession::tr("Copying Guest Additions installer file \"%s\" to \"%s\" on guest"),
    947                                                        mSource.c_str(), strFileDest.c_str()),
    948                                                        pTask, pProgressCopyTo);
    949             if (RT_SUCCESS(rc))
     982            try
     983            {
     984                try
     985                {
     986                    pTask = new SessionTaskCopyTo(pSession /* GuestSession */,
     987                                                  &pISO->file, cbOffset, cbSize,
     988                                                  strFileDest, FileCopyFlag_None);
     989                }
     990                catch(...)
     991                {
     992                    hr = setProgressErrorMsg(VBOX_E_IPRT_ERROR,
     993                                  GuestSession::tr("Failed to create SessionTaskCopyTo object "));
     994                    throw;
     995                }
     996
     997                hr = pTask->Init(Utf8StrFmt(GuestSession::tr("Copying Guest Additions installer file \"%s\" to \"%s\" on guest"),
     998                                            mSource.c_str(), strFileDest.c_str()));
     999                if (FAILED(hr))
     1000                {
     1001                    delete pTask;
     1002                    hr = setProgressErrorMsg(VBOX_E_IPRT_ERROR,
     1003                                  GuestSession::tr("Creating progress object for SessionTaskCopyTo object failed"));
     1004                    throw hr;
     1005                }
     1006
     1007                hr = pTask->createThread(NULL, RTTHREADTYPE_MAIN_HEAVY_WORKER);
     1008
     1009                if (SUCCEEDED(hr))
     1010                {
     1011                    /* Return progress to the caller. */
     1012                    pProgressCopyTo = pTask->GetProgressObject();
     1013                }
     1014                else
     1015                    hr = setProgressErrorMsg(VBOX_E_IPRT_ERROR,
     1016                                  GuestSession::tr("Starting thread for updating additions failed "));
     1017            }
     1018            catch(std::bad_alloc &)
     1019            {
     1020                hr = E_OUTOFMEMORY;
     1021            }
     1022            catch(HRESULT eHR)
     1023            {
     1024                hr = eHR;
     1025                LogFlowThisFunc(("Exception was caught in the function \n"));
     1026            }
     1027
     1028            if (SUCCEEDED(hr))
    9501029            {
    9511030                BOOL fCanceled = FALSE;
    952                 HRESULT hr = pProgressCopyTo->WaitForCompletion(-1);
     1031                hr = pProgressCopyTo->WaitForCompletion(-1);
    9531032                if (   SUCCEEDED(pProgressCopyTo->COMGETTER(Canceled)(&fCanceled))
    9541033                    && fCanceled)
     
    15401619DECLCALLBACK(int) SessionTaskUpdateAdditions::taskThread(RTTHREAD Thread, void *pvUser)
    15411620{
    1542     std::auto_ptr<SessionTaskUpdateAdditions> task(static_cast<SessionTaskUpdateAdditions*>(pvUser));
    1543     AssertReturn(task.get(), VERR_GENERAL_FAILURE);
    1544 
    1545     LogFlowFunc(("pTask=%p\n", task.get()));
     1621    SessionTaskUpdateAdditions* task = static_cast<SessionTaskUpdateAdditions*>(pvUser);
     1622    AssertReturn(task, VERR_GENERAL_FAILURE);
     1623
     1624    LogFlowFunc(("pTask=%p\n", task));
     1625
    15461626    return task->Run();
    15471627}
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