mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
e4a508dec8
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.
48 lines
1.2 KiB
HTML
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>
|