diff -r 18da5738c9b6 -r ef2ebc87518f lowlevellibsandfws/pluginfw/Framework/frame/RegistryData.h --- a/lowlevellibsandfws/pluginfw/Framework/frame/RegistryData.h Thu Apr 01 00:15:09 2010 +0300 +++ b/lowlevellibsandfws/pluginfw/Framework/frame/RegistryData.h Wed Apr 14 17:44:02 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__