Bug 1340425 - Add back the magic GC in DoShutdown() to avoid intermittent leaks. r=smaug draft
authorAndrew McCreight <continuation@gmail.com>
Wed, 23 Aug 2017 10:27:12 -0700
changeset 651469 73793cd0abb59b9d8ae1a4e2e1f4faa740fc54d2
parent 650074 a9d372645a32b8d23d44244f351639af9d73b96a
child 727732 1f986300ac86920806ebcf23bde01f54ea1e3b59
push id75749
push userbmo:continuation@gmail.com
push dateWed, 23 Aug 2017 19:56:09 +0000
reviewerssmaug
bugs1340425
milestone57.0a1
Bug 1340425 - Add back the magic GC in DoShutdown() to avoid intermittent leaks. r=smaug MozReview-Commit-ID: CNkjPk9FLKj
toolkit/xre/nsXREDirProvider.cpp
--- a/toolkit/xre/nsXREDirProvider.cpp
+++ b/toolkit/xre/nsXREDirProvider.cpp
@@ -1096,16 +1096,24 @@ nsXREDirProvider::DoShutdown()
   if (mProfileNotified) {
     nsCOMPtr<nsIObserverService> obsSvc =
       mozilla::services::GetObserverService();
     NS_ASSERTION(obsSvc, "No observer service?");
     if (obsSvc) {
       static const char16_t kShutdownPersist[] = u"shutdown-persist";
       obsSvc->NotifyObservers(nullptr, "profile-change-net-teardown", kShutdownPersist);
       obsSvc->NotifyObservers(nullptr, "profile-change-teardown", kShutdownPersist);
+
+#ifdef DEBUG
+      // Not having this causes large intermittent leaks. See bug 1340425.
+      if (JSContext* cx = dom::danger::GetJSContext()) {
+        JS_GC(cx);
+      }
+#endif
+
       obsSvc->NotifyObservers(nullptr, "profile-before-change", kShutdownPersist);
       obsSvc->NotifyObservers(nullptr, "profile-before-change-qm", kShutdownPersist);
       obsSvc->NotifyObservers(nullptr, "profile-before-change-telemetry", kShutdownPersist);
     }
     mProfileNotified = false;
   }
 
 #if (defined(XP_WIN) || defined(XP_MACOSX)) && defined(MOZ_CONTENT_SANDBOX)