[tbb-commits] [torbutton/master] Bug #15502: Ensure garbage collection runs immediately and completely.
mikeperry at torproject.org
mikeperry at torproject.org
Tue Apr 21 00:27:09 UTC 2015
commit accb4b887b4427221358fc8c17bbbdf85e77467c
Author: Mike Perry <mikeperry-git at torproject.org>
Date: Wed Apr 15 21:34:07 2015 -0700
Bug #15502: Ensure garbage collection runs immediately and completely.
---
src/chrome/content/torbutton.js | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/src/chrome/content/torbutton.js b/src/chrome/content/torbutton.js
index 2fdfd1c..7d229dd 100644
--- a/src/chrome/content/torbutton.js
+++ b/src/chrome/content/torbutton.js
@@ -1887,7 +1887,34 @@ function torbutton_do_new_identity() {
// Run garbage collection and cycle collection after window is gone.
// This ensures that blob URIs are forgotten.
window.addEventListener("unload", function (event) {
+ torbutton_log(3, "Initiating New Identity GC pass");
+ // Clear out potential pending sInterSliceGCTimer:
+ m_tb_domWindowUtils.runNextCollectorTimer();
+
+ // Clear out potential pending sICCTimer:
+ m_tb_domWindowUtils.runNextCollectorTimer();
+
+ // Schedule a garbage collection in 4000-1000ms...
+ m_tb_domWindowUtils.garbageCollect();
+
+ // To ensure the GC runs immediately instead of 4-10s from now, we need
+ // to poke it at least 11 times.
+ // We need 5 pokes for GC, 1 poke for the interSliceGC, and 5 pokes for CC.
+ // See nsJSContext::RunNextCollectorTimer() in
+ // https://mxr.mozilla.org/mozilla-central/source/dom/base/nsJSEnvironment.cpp#1970.
+ // XXX: We might want to make our own method for immediate full GC...
+ for (let poke = 0; poke < 11; poke++) {
+ m_tb_domWindowUtils.runNextCollectorTimer();
+ }
+
+ // And now, since the GC probably actually ran *after* the CC last time,
+ // run the whole thing again.
m_tb_domWindowUtils.garbageCollect();
+ for (let poke = 0; poke < 11; poke++) {
+ m_tb_domWindowUtils.runNextCollectorTimer();
+ }
+
+ torbutton_log(3, "Completed New Identity GC pass");
});
// Close the current window for added safety
More information about the tbb-commits
mailing list