Bug 1337637 - Release rule when deleting from ServoCSSRuleList. r?heycam draft
authorXidorn Quan <me@upsuper.org>
Wed, 08 Feb 2017 14:19:08 +1100
changeset 480290 a8aaf70a070065f0b717229c6482e4e981f00eae
parent 480289 3492886a77d50bacfd17c0e8fa6e26dde0691154
child 544915 f8f3524635692aee57a8fea80188c581aa40fba1
push id44504
push userxquan@mozilla.com
push dateWed, 08 Feb 2017 03:20:48 +0000
reviewersheycam
bugs1337637
milestone54.0a1
Bug 1337637 - Release rule when deleting from ServoCSSRuleList. r?heycam MozReview-Commit-ID: CrVNCTEJ7l6
layout/style/ServoCSSRuleList.cpp
--- a/layout/style/ServoCSSRuleList.cpp
+++ b/layout/style/ServoCSSRuleList.cpp
@@ -128,16 +128,20 @@ ServoCSSRuleList::InsertRule(const nsASt
   return rv;
 }
 
 nsresult
 ServoCSSRuleList::DeleteRule(uint32_t aIndex)
 {
   nsresult rv = Servo_CssRules_DeleteRule(mRawRules, aIndex);
   if (!NS_FAILED(rv)) {
+    uintptr_t rule = mRules[aIndex];
+    if (rule > kMaxRuleType) {
+      CastToPtr(rule)->Release();
+    }
     mRules.RemoveElementAt(aIndex);
   }
   return rv;
 }
 
 ServoCSSRuleList::~ServoCSSRuleList()
 {
   EnumerateInstantiatedRules([](css::Rule* rule) { rule->Release(); });