gecko/js/xpconnect/tests/mochitest/test_bug1158558.html
Andrew McCreight e4a508dec8 Bug 1158558, part 2 - Finish incremental GCs in progress in BeginCollection() and ShutdownCollect(). r=smaug
Various parts of the first half of BeginCollection() can start an incremental GC.
This is bad because running the GC and CC at the same time can cause the CC to end
up with pointers to dead JS objects.

To avoid this, we finish any incremental GC in progress in BeginCollection. This
is slow, but hopefully it is rare.
2015-05-15 10:33:09 -07:00

48 lines
1.2 KiB
HTML

<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=1158558
-->
<head>
<meta charset="utf-8">
<title>Test for Bug 1158558</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1158558">Mozilla Bug 1158558</a>
<p id="display"></p>
<div id="content" style="display: none">
<input id="ipt"></input>
</div>
<pre id="test">
</pre>
<script type="application/javascript">
/** Test for Bug 1158558 **/
// Observers of cycle-collector-begin can be implemented in JS, and
// thus can end up starting an incremental GC while we're in the middle
// of a CC slice.
SimpleTest.waitForExplicitFinish();
var observer = {
observe: function(subject, topic, data) {
SpecialPowers.removeObserver(observer, "cycle-collector-begin");
SpecialPowers.Cu.getJSTestingFunctions().startgc(1);
ok(true, "Do something so the test harness doesn't get angry");
SimpleTest.finish();
}
};
SpecialPowers.addObserver(observer, "cycle-collector-begin", false);
SpecialPowers.Cu.forceCC();
</script>
</body>
</html>