- Timestamp:
- Oct 30, 2015 9:03:19 AM (9 years ago)
- Location:
- trunk/src/VBox/Main
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/include/GuestProcessImpl.h
r55591 r58521 167 167 } 168 168 } mData; 169 170 friend class GuestProcessStartTask; 169 171 }; 170 172 … … 224 226 GuestProcessStream mStdOut; 225 227 GuestProcessStream mStdErr; 228 226 229 }; 227 230 -
trunk/src/VBox/Main/include/GuestSessionImpl.h
r57425 r58521 27 27 #include "GuestFileImpl.h" 28 28 #include "GuestFsObjInfoImpl.h" 29 #include "ThreadTask.h" 29 30 30 31 #include <iprt/isofs.h> /* For UpdateAdditions. */ … … 36 37 * runs in a Main worker thread. 37 38 */ 38 class GuestSessionTask 39 class GuestSessionTask : public ThreadTask 39 40 { 40 41 public: … … 48 49 virtual int Run(void) = 0; 49 50 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; 50 61 51 62 protected: … … 56 67 int setProgressSuccess(void); 57 68 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(); 59 75 protected: 60 76 … … 84 100 int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress); 85 101 static DECLCALLBACK(int) taskThread(RTTHREAD Thread, void *pvUser); 102 void handler() 103 { 104 int vrc = SessionTaskOpen::taskThread(NULL, this); 105 } 86 106 87 107 protected: … … 114 134 int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress); 115 135 static DECLCALLBACK(int) taskThread(RTTHREAD Thread, void *pvUser); 136 void handler() 137 { 138 int vrc = SessionTaskCopyTo::taskThread(NULL, this); 139 } 116 140 117 141 protected: … … 142 166 int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress); 143 167 static DECLCALLBACK(int) taskThread(RTTHREAD Thread, void *pvUser); 168 void handler() 169 { 170 int vrc = SessionTaskCopyFrom::taskThread(NULL, this); 171 } 144 172 145 173 protected: … … 168 196 int RunAsync(const Utf8Str &strDesc, ComObjPtr<Progress> &pProgress); 169 197 static DECLCALLBACK(int) taskThread(RTTHREAD Thread, void *pvUser); 198 void handler() 199 { 200 int vrc = SessionTaskUpdateAdditions::taskThread(NULL, this); 201 } 170 202 171 203 protected: -
trunk/src/VBox/Main/src-client/GuestCtrlImpl.cpp
r56030 r58521 559 559 else 560 560 { 561 562 ComObjPtr<Progress> pProgress; 563 SessionTaskUpdateAdditions *pTask = NULL; 561 564 try 562 565 { 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)) 568 589 { 569 590 /* Return progress to the caller. */ 591 pProgress = pTask->GetProgressObject(); 570 592 hr = pProgress.queryInterfaceTo(aProgress.asOutParam()); 571 593 } 572 594 else 573 595 hr = setError(VBOX_E_IPRT_ERROR, 574 tr("Starting t ask for updating Guest Additions on the guest failed: %Rrc"), rc);596 tr("Starting thread for updating Guest Additions on the guest failed ")); 575 597 } 576 598 catch(std::bad_alloc &) … … 578 600 hr = E_OUTOFMEMORY; 579 601 } 602 catch(HRESULT eHR) 603 { 604 LogFlowThisFunc(("Exception was caught in the function \n")); 605 } 580 606 } 581 607 } -
trunk/src/VBox/Main/src-client/GuestProcessImpl.cpp
r57948 r58521 41 41 #include "AutoCaller.h" 42 42 #include "VBoxEvents.h" 43 #include "ThreadTask.h" 43 44 44 45 #include <memory> /* For auto_ptr. */ … … 59 60 60 61 61 class GuestProcessTask 62 class GuestProcessTask : public ThreadTask 62 63 { 63 64 public: … … 84 85 85 86 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 } 87 96 }; 88 97 … … 1128 1137 1129 1138 int vrc; 1130 1139 HRESULT hr = S_OK; 1140 1141 GuestProcessStartTask* pTask = NULL; 1131 1142 try 1132 1143 { 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(); 1147 1154 } 1148 1155 catch(std::bad_alloc &) 1149 1156 { 1150 1157 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; 1151 1164 } 1152 1165 … … 1160 1173 LogFlowFunc(("pvUser=%p\n", pvUser)); 1161 1174 1162 std::auto_ptr<GuestProcessStartTask> pTask(static_cast<GuestProcessStartTask*>(pvUser)); 1163 AssertPtr(pTask.get()); 1175 GuestProcessStartTask* pTask = static_cast<GuestProcessStartTask*>(pvUser); 1164 1176 1165 1177 const ComObjPtr<GuestProcess> pProcess(pTask->i_process()); -
trunk/src/VBox/Main/src-client/GuestSessionImpl.cpp
r57948 r58521 33 33 #include "VBoxEvents.h" 34 34 #include "VMMDev.h" 35 #include "ThreadTask.h" 35 36 36 37 #include <memory> /* For auto_ptr. */ … … 55 56 * asynchronous session task. 56 57 */ 57 class GuestSessionTaskInternal 58 class GuestSessionTaskInternal : public ThreadTask 58 59 { 59 60 public: 60 61 61 62 GuestSessionTaskInternal(GuestSession *pSession) 62 : mSession(pSession), 63 mRC(VINF_SUCCESS) { } 63 : ThreadTask("GenericGuestSessionTaskInternal") 64 , mSession(pSession) 65 , mRC(VINF_SUCCESS) { } 64 66 65 67 virtual ~GuestSessionTaskInternal(void) { } … … 83 85 84 86 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 } 86 96 }; 87 97 … … 1709 1719 LogFlowThisFuncEnter(); 1710 1720 1721 HRESULT hr = S_OK; 1711 1722 int vrc; 1712 1723 1724 GuestSessionTaskInternalOpen* pTask = NULL; 1713 1725 try 1714 1726 { 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 1715 1735 /* Asynchronously open the session on the guest by kicking off a 1716 1736 * 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 1729 1740 } 1730 1741 catch(std::bad_alloc &) 1731 1742 { 1732 1743 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; 1733 1750 } 1734 1751 … … 1742 1759 LogFlowFunc(("pvUser=%p\n", pvUser)); 1743 1760 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); 1746 1764 1747 1765 const ComObjPtr<GuestSession> pSession(pTask->Session()); … … 2128 2146 /* Initialize our worker task. */ 2129 2147 std::auto_ptr<GuestSessionTask> task(pTask); 2130 2131 2148 int rc = task->RunAsync(strTaskDesc, pProgress); 2132 2149 if (RT_FAILURE(rc)) … … 2459 2476 try 2460 2477 { 2478 SessionTaskCopyFrom *pTask = NULL; 2461 2479 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 { 2467 2504 /* Return progress to the caller. */ 2505 pProgress = pTask->GetProgressObject(); 2468 2506 hr = pProgress.queryInterfaceTo(aProgress.asOutParam()); 2507 } 2469 2508 else 2470 2509 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 2472 2513 } 2473 2514 catch(std::bad_alloc &) 2474 2515 { 2475 2516 hr = E_OUTOFMEMORY; 2517 } 2518 catch(HRESULT eHR) 2519 { 2520 hr = eHR; 2521 LogFlowThisFunc(("Exception was caught in the function \n")); 2476 2522 } 2477 2523 … … 2503 2549 try 2504 2550 { 2551 SessionTaskCopyTo *pTask = NULL; 2505 2552 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)) 2512 2576 { 2513 2577 /* Return progress to the caller. */ 2578 pProgress = pTask->GetProgressObject(); 2514 2579 hr = pProgress.queryInterfaceTo(aProgress.asOutParam()); 2515 2580 } 2516 2581 else 2517 2582 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()); 2519 2585 } 2520 2586 catch(std::bad_alloc &) 2521 2587 { 2522 2588 hr = E_OUTOFMEMORY; 2589 } 2590 catch(HRESULT eHR) 2591 { 2592 hr = eHR; 2593 LogFlowThisFunc(("Exception was caught in the function \n")); 2523 2594 } 2524 2595 -
trunk/src/VBox/Main/src-client/GuestSessionImplTasks.cpp
r57425 r58521 66 66 ///////////////////////////////////////////////////////////////////////////// 67 67 68 GuestSessionTask::GuestSessionTask(GuestSession *pSession) 68 GuestSessionTask::GuestSessionTask(GuestSession *pSession):ThreadTask("GenericGuestSessionTask") 69 69 { 70 70 mSession = pSession; … … 73 73 GuestSessionTask::~GuestSessionTask(void) 74 74 { 75 } 76 77 HRESULT 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 101 ComObjPtr<Progress> GuestSessionTask::GetProgressObject() const 102 { 103 if(mProgress != NULL) 104 return mProgress; 105 else 106 return NULL; 75 107 } 76 108 … … 170 202 mTimeoutMS(uTimeoutMS) 171 203 { 172 204 m_strTaskName = "gctlSesOpen"; 173 205 } 174 206 … … 212 244 DECLCALLBACK(int) SessionTaskOpen::taskThread(RTTHREAD Thread, void *pvUser) 213 245 { 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 218 251 return task->Run(NULL /* guestRc */); 219 252 } … … 229 262 { 230 263 mCopyFileFlags = uFlags; 264 m_strTaskName = "gctlCpyTo"; 231 265 } 232 266 … … 243 277 mDest = strDest; 244 278 mCopyFileFlags = uFlags; 279 m_strTaskName = "gctlCpyTo"; 245 280 } 246 281 … … 572 607 DECLCALLBACK(int) SessionTaskCopyTo::taskThread(RTTHREAD Thread, void *pvUser) 573 608 { 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 578 614 return task->Run(); 579 615 } … … 586 622 mDest = strDest; 587 623 mFlags = uFlags; 624 m_strTaskName = "gctlCpyFrom"; 588 625 } 589 626 … … 844 881 DECLCALLBACK(int) SessionTaskCopyFrom::taskThread(RTTHREAD Thread, void *pvUser) 845 882 { 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 850 888 return task->Run(); 851 889 } … … 860 898 mArguments = aArguments; 861 899 mFlags = uFlags; 900 m_strTaskName = "gctlUpGA"; 862 901 } 863 902 … … 930 969 rc = RTFileSeek(pISO->file, cbOffset, RTFILE_SEEK_BEGIN, NULL); 931 970 971 HRESULT hr = S_OK; 932 972 /* Copy over the Guest Additions file to the guest. */ 933 973 if (RT_SUCCESS(rc)) … … 938 978 if (RT_SUCCESS(rc)) 939 979 { 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; 945 981 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)) 950 1029 { 951 1030 BOOL fCanceled = FALSE; 952 HRESULThr = pProgressCopyTo->WaitForCompletion(-1);1031 hr = pProgressCopyTo->WaitForCompletion(-1); 953 1032 if ( SUCCEEDED(pProgressCopyTo->COMGETTER(Canceled)(&fCanceled)) 954 1033 && fCanceled) … … 1540 1619 DECLCALLBACK(int) SessionTaskUpdateAdditions::taskThread(RTTHREAD Thread, void *pvUser) 1541 1620 { 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 1546 1626 return task->Run(); 1547 1627 }
Note:
See TracChangeset
for help on using the changeset viewer.