зеркало из https://github.com/mozilla/gecko-dev.git
Bug 904202. Make sure we remove our nsContentLists from list caches during unlink. r=smaug
This commit is contained in:
Родитель
2bbd14edd3
Коммит
adf46cfff7
|
@ -44,7 +44,17 @@ nsBaseContentList::~nsBaseContentList()
|
|||
{
|
||||
}
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_1(nsBaseContentList, mElements)
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(nsBaseContentList)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsBaseContentList)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(mElements)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER
|
||||
tmp->RemoveFromCaches();
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsBaseContentList)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mElements)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(nsBaseContentList)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_BEGIN(nsBaseContentList)
|
||||
if (nsCCUncollectableMarker::sGeneration && tmp->IsBlack()) {
|
||||
|
|
|
@ -96,6 +96,14 @@ public:
|
|||
MOZ_OVERRIDE = 0;
|
||||
|
||||
protected:
|
||||
/**
|
||||
* To be called from non-destructor locations (e.g. unlink) that want to
|
||||
* remove from caches. Cacheable subclasses should override.
|
||||
*/
|
||||
virtual void RemoveFromCaches()
|
||||
{
|
||||
}
|
||||
|
||||
nsTArray< nsCOMPtr<nsIContent> > mElements;
|
||||
};
|
||||
|
||||
|
@ -365,7 +373,8 @@ protected:
|
|||
* Needed because if subclasses want to have cache behavior they can't just
|
||||
* override RemoveFromHashtable(), since we call that in our destructor.
|
||||
*/
|
||||
virtual void RemoveFromCaches() {
|
||||
virtual void RemoveFromCaches() MOZ_OVERRIDE
|
||||
{
|
||||
RemoveFromHashtable();
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче