/** * Uninitializes the Session object. * * @note Locks this object for writing. */ void Session::uninit() { LogFlowThisFuncEnter(); /* Enclose the state transition Ready->InUninit->NotReady */ AutoUninitSpan autoUninitSpan(this); if (autoUninitSpan.uninitDone()) { LogFlowThisFunc(("Already uninitialized.\n")); LogFlowThisFuncLeave(); return; } /* unlockMachine() needs write lock */ AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); if (mState != SessionState_Unlocked) { Assert(mState == SessionState_Locked || mState == SessionState_Spawning); HRESULT rc = unlockMachine(true /* aFinalRelease */, false /* aFromServer */, alock); AssertComRC(rc); } LogFlowThisFuncLeave(); }
STDMETHODIMP Session::UnlockMachine() { LogFlowThisFunc(("mState=%d, mType=%d\n", mState, mType)); AutoCaller autoCaller(this); if (FAILED(autoCaller.rc())) return autoCaller.rc(); /* close() needs write lock */ AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); CHECK_OPEN(); return unlockMachine(false /* aFinalRelease */, false /* aFromServer */); }
STDMETHODIMP Session::Uninitialize() { LogFlowThisFuncEnter(); AutoCaller autoCaller(this); HRESULT rc = S_OK; if (autoCaller.state() == Ready) { /* close() needs write lock */ AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); LogFlowThisFunc(("mState=%s, mType=%d\n", Global::stringifySessionState(mState), mType)); if (mState == SessionState_Unlocking) { LogFlowThisFunc(("Already being unlocked.\n")); return S_OK; } AssertMsgReturn( mState == SessionState_Locked || mState == SessionState_Spawning, ("Session is in wrong state (%ld), expected locked (%ld) or spawning (%ld)\n", mState, SessionState_Locked, SessionState_Spawning), VBOX_E_INVALID_VM_STATE); /* close ourselves */ rc = unlockMachine(false /* aFinalRelease */, true /* aFromServer */); } else if (autoCaller.state() == InUninit) { /* * We might have already entered Session::uninit() at this point, * return silently */ LogFlowThisFunc(("Already uninitialized.\n")); } else { LogWarningThisFunc(("UNEXPECTED uninitialization!\n")); rc = autoCaller.rc(); } LogFlowThisFunc(("rc=%08X\n", rc)); LogFlowThisFuncLeave(); return rc; }
STDMETHODIMP Session::Uninitialize() { LogFlowThisFuncEnter(); AutoCaller autoCaller(this); HRESULT rc = S_OK; if (autoCaller.state() == Ready) { /* close() needs write lock */ AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); LogFlowThisFunc(("mState=%s, mType=%d\n", Global::stringifySessionState(mState), mType)); if (mState == SessionState_Unlocking) { LogFlowThisFunc(("Already being unlocked.\n")); return S_OK; } #ifndef DEBUG_andy /* Don't bug me -- now time to fix this at the moment. */ AssertReturn(mState == SessionState_Locked || mState == SessionState_Spawning, VBOX_E_INVALID_VM_STATE); #endif /* close ourselves */ rc = unlockMachine(false /* aFinalRelease */, true /* aFromServer */); } else if (autoCaller.state() == InUninit) { /* * We might have already entered Session::uninit() at this point, * return silently */ LogFlowThisFunc(("Already uninitialized.\n")); } else { LogWarningThisFunc(("UNEXPECTED uninitialization!\n")); rc = autoCaller.rc(); } LogFlowThisFunc(("rc=%08X\n", rc)); LogFlowThisFuncLeave(); return rc; }