author | James Teh <jteh@mozilla.com> |
Fri, 24 Nov 2017 15:10:41 +1000 | |
changeset 394020 | 79bf386e2fb3640330ecbdf34d122e021f8c25d7 |
parent 394019 | 57aa3370993fb4f1fca77ebd535ae189abe75363 |
child 394021 | c828057d4190b2e23da5df8f31ba42826607d991 |
push id | 32989 |
push user | dluca@mozilla.com |
push date | Wed, 29 Nov 2017 10:09:52 +0000 |
treeherder | mozilla-central@40b464eb6b31 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | aklotz |
bugs | 1418448 |
milestone | 59.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/accessible/ipc/win/HandlerProvider.cpp +++ b/accessible/ipc/win/HandlerProvider.cpp @@ -394,37 +394,17 @@ HandlerProvider::BuildDynamicIA2Data(Dyn hr = target->get_uniqueID(&aOutIA2Data->mUniqueId); } void HandlerProvider::CleanupStaticIA2Data(StaticIA2Data& aData) { // When CoMarshalInterface writes interfaces out to a stream, it AddRefs. // Therefore, we must release our references after this. - if (aData.mIA2) { - aData.mIA2->Release(); - } - if (aData.mIEnumVARIANT) { - aData.mIEnumVARIANT->Release(); - } - if (aData.mIAHypertext) { - aData.mIAHypertext->Release(); - } - if (aData.mIAHyperlink) { - aData.mIAHyperlink->Release(); - } - if (aData.mIATable) { - aData.mIATable->Release(); - } - if (aData.mIATable2) { - aData.mIATable2->Release(); - } - if (aData.mIATableCell) { - aData.mIATableCell->Release(); - } + ReleaseStaticIA2DataInterfaces(aData); ZeroMemory(&aData, sizeof(StaticIA2Data)); } void HandlerProvider::BuildInitialIA2Data( NotNull<mscom::IInterceptor*> aInterceptor, StaticIA2Data* aOutStaticData, DynamicIA2Data* aOutDynamicData)
--- a/accessible/ipc/win/handler/AccessibleHandler.cpp +++ b/accessible/ipc/win/handler/AccessibleHandler.cpp @@ -405,37 +405,17 @@ AccessibleHandler::ReadHandlerPayload(IS // The proxy manager will resolve these interfaces now on QI, // so we can release these pointers. // However, we don't null them out because we use their presence // to determine whether the interface is available // so as to avoid pointless cross-proc QI calls returning E_NOINTERFACE. // Note that if pointers to other objects (in contrast to // interfaces of *this* object) are added in future, we should not release // those pointers. - if (mCachedData.mStaticData.mIA2) { - mCachedData.mStaticData.mIA2->Release(); - } - if (mCachedData.mStaticData.mIEnumVARIANT) { - mCachedData.mStaticData.mIEnumVARIANT->Release(); - } - if (mCachedData.mStaticData.mIAHypertext) { - mCachedData.mStaticData.mIAHypertext->Release(); - } - if (mCachedData.mStaticData.mIAHyperlink) { - mCachedData.mStaticData.mIAHyperlink->Release(); - } - if (mCachedData.mStaticData.mIATable) { - mCachedData.mStaticData.mIATable->Release(); - } - if (mCachedData.mStaticData.mIATable2) { - mCachedData.mStaticData.mIATable2->Release(); - } - if (mCachedData.mStaticData.mIATableCell) { - mCachedData.mStaticData.mIATableCell->Release(); - } + ReleaseStaticIA2DataInterfaces(mCachedData.mStaticData); if (!mCachedData.mGeckoBackChannel) { return S_OK; } RefPtr<AccessibleHandlerControl> ctl(gControlFactory.GetOrCreateSingleton()); if (!ctl) { return E_OUTOFMEMORY;
--- a/accessible/ipc/win/handler/HandlerDataCleanup.h +++ b/accessible/ipc/win/handler/HandlerDataCleanup.h @@ -9,16 +9,44 @@ #include <OleAuto.h> #include "HandlerData.h" namespace mozilla { namespace a11y { inline void +ReleaseStaticIA2DataInterfaces(StaticIA2Data& aData) +{ + // Only interfaces of the IA2 object should be released here, never other + // objects! + if (aData.mIA2) { + aData.mIA2->Release(); + } + if (aData.mIEnumVARIANT) { + aData.mIEnumVARIANT->Release(); + } + if (aData.mIAHypertext) { + aData.mIAHypertext->Release(); + } + if (aData.mIAHyperlink) { + aData.mIAHyperlink->Release(); + } + if (aData.mIATable) { + aData.mIATable->Release(); + } + if (aData.mIATable2) { + aData.mIATable2->Release(); + } + if (aData.mIATableCell) { + aData.mIATableCell->Release(); + } +} + +inline void CleanupDynamicIA2Data(DynamicIA2Data& aData, bool aZero=true) { ::VariantClear(&aData.mRole); if (aData.mKeyboardShortcut) { ::SysFreeString(aData.mKeyboardShortcut); } if (aData.mName) { ::SysFreeString(aData.mName);