STDMETHODIMP USBDeviceFilter::COMSETTER(MaskedInterfaces) (ULONG aMaskedIfs) { AutoCaller autoCaller(this); if (FAILED(autoCaller.rc())) return autoCaller.rc(); /* the machine needs to be mutable */ AutoMutableStateDependency adep(mParent->getMachine()); if (FAILED(adep.rc())) return adep.rc(); AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); if (mData->mMaskedIfs != aMaskedIfs) { m_fModified = true; ComObjPtr<Machine> pMachine = mParent->getMachine(); mData.backup(); mData->mMaskedIfs = aMaskedIfs; // leave the lock before informing callbacks alock.release(); AutoWriteLock mlock(pMachine COMMA_LOCKVAL_SRC_POS); pMachine->setModified(Machine::IsModified_USB); mlock.release(); return mParent->onDeviceFilterChange(this); } return S_OK; }
STDMETHODIMP USBDeviceFilter::COMSETTER(Name) (IN_BSTR aName) { CheckComArgStrNotEmptyOrNull(aName); AutoCaller autoCaller(this); if (FAILED(autoCaller.rc())) return autoCaller.rc(); /* the machine needs to be mutable */ AutoMutableStateDependency adep(mParent->getMachine()); if (FAILED(adep.rc())) return adep.rc(); AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); if (mData->mName != aName) { m_fModified = true; ComObjPtr<Machine> pMachine = mParent->getMachine(); mData.backup(); mData->mName = aName; // leave the lock before informing callbacks alock.release(); AutoWriteLock mlock(pMachine COMMA_LOCKVAL_SRC_POS); pMachine->setModified(Machine::IsModified_USB); mlock.release(); return mParent->onDeviceFilterChange(this); } return S_OK; }
/** * Generic USB filter field setter, expects UTF-8 input. * * @param aIdx The field index. * @param aStr The new value. * * @return COM status. */ HRESULT USBDeviceFilter::usbFilterFieldSetter(USBFILTERIDX aIdx, const Utf8Str &strNew) { AutoCaller autoCaller(this); if (FAILED(autoCaller.rc())) return autoCaller.rc(); /* the machine needs to be mutable */ AutoMutableStateDependency adep(mParent->getMachine()); if (FAILED(adep.rc())) return adep.rc(); AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); Utf8Str strOld; usbFilterFieldToString(&mData->mUSBFilter, aIdx, strOld); if (strOld != strNew) { m_fModified = true; ComObjPtr<Machine> pMachine = mParent->getMachine(); mData.backup(); Utf8Str errStr; HRESULT rc = usbFilterFieldFromString(&mData->mUSBFilter, aIdx, strNew, errStr); if (FAILED(rc)) { mData.rollback(); return setError(rc, "%s", errStr.c_str()); } // leave the lock before informing callbacks alock.release(); AutoWriteLock mlock(pMachine COMMA_LOCKVAL_SRC_POS); pMachine->setModified(Machine::IsModified_USB); mlock.release(); return mParent->onDeviceFilterChange(this); } return S_OK; }
STDMETHODIMP USBDeviceFilter::COMSETTER(Remote) (IN_BSTR aRemote) { AutoCaller autoCaller(this); if (FAILED(autoCaller.rc())) return autoCaller.rc(); /* the machine needs to be mutable */ AutoMutableStateDependency adep(mParent->getMachine()); if (FAILED(adep.rc())) return adep.rc(); AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); if (mData->mRemote.string() != aRemote) { Data::BOOLFilter flt = aRemote; ComAssertRet(!flt.isNull(), E_FAIL); if (!flt.isValid()) return setError(E_INVALIDARG, tr("Remote state filter string '%ls' is not valid (error at position %d)"), aRemote, flt.errorPosition() + 1); m_fModified = true; ComObjPtr<Machine> pMachine = mParent->getMachine(); mData.backup(); mData->mRemote = flt; // leave the lock before informing callbacks alock.release(); AutoWriteLock mlock(pMachine COMMA_LOCKVAL_SRC_POS); pMachine->setModified(Machine::IsModified_USB); mlock.release(); return mParent->onDeviceFilterChange(this); } return S_OK; }