diff -r 47c74d1534e1 -r ddc455616bd6 lowlevellibsandfws/pluginfw/Framework/frame/RegistryData.h --- a/lowlevellibsandfws/pluginfw/Framework/frame/RegistryData.h Fri Apr 16 16:46:38 2010 +0300 +++ b/lowlevellibsandfws/pluginfw/Framework/frame/RegistryData.h Mon May 03 14:06:43 2010 +0300 @@ -252,8 +252,12 @@ TBool aLegitimateImpl); static void ResetTInterfaceIndex(TAny* aObject); - /** Remove the pointer from iImplIndex */ - TBool RemoveImplFromImplIndex(CImplementationData* aPtr) const; + /** Remove the pointer from iImplIndex based on the impl address*/ + TBool RemoveImplByAddrFromImplIndex(CImplementationData* aPtr) const; + + /** Used to restore the impIndex sanity in case of a leave */ + static void RemoveImplFromImplIndexCleanUp(TAny* aPtr); + /** Insert aNewImpl into iImplIndex. */ TInt InsertImplIntoImplIndex(CImplementationData* aNewImpl) const; /** Store change in drive state - addition or removal*/ @@ -490,4 +494,14 @@ iUnusedImpls.Reset(); } + + class TCleanupImplIndexEntry + { + public: + TCleanupImplIndexEntry(CRegistryData* aRegData, CRegistryData::CImplementationData* aImpl) + : iRegistryData(aRegData), iImplEntry(aImpl) + {} + CRegistryData* iRegistryData; + CRegistryData::CImplementationData* iImplEntry; + }; #endif //__REGISTRYDATA_H__