Closed
Bug 815999
Opened 13 years ago
Closed 13 years ago
Intermittent Assertion failure: !dst->compartment()->isCollecting() in browser_dbg_chrome-debugging.js [@ EndMarkingCompartmentGroup] (now [@ ShouldMarkCrossCompartment])
Categories
(Core :: JavaScript Engine, defect)
Tracking
()
RESOLVED
FIXED
mozilla20
People
(Reporter: peterv, Assigned: jonco)
References
Details
(Keywords: assertion, intermittent-failure)
Crash Data
Attachments
(3 files, 2 obsolete files)
6.80 KB,
patch
|
billm
:
review+
|
Details | Diff | Splinter Review |
5.43 KB,
patch
|
billm
:
review+
|
Details | Diff | Splinter Review |
6.06 KB,
patch
|
mccr8
:
review+
|
Details | Diff | Splinter Review |
https://tbpl.mozilla.org/php/getParsedLog.php?id=17399462&tree=Mozilla-Inbound
Rev5 MacOSX Mountain Lion 10.8 mozilla-inbound debug test mochitest-browser-chrome on 2012-11-27 21:41:59 PST for push 6f0c997ba776
slave: talos-mtnlion-r5-077
TEST-START | chrome://mochitests/content/browser/browser/devtools/debugger/test/browser_dbg_chrome-debugging.js
++DOCSHELL 0x158da7e60 == 13 [id = 2758]
++DOMWINDOW == 54 (0x1281cba08) [serial = 7287] [outer = 0x0]
++DOMWINDOW == 55 (0x158d872a8) [serial = 7288] [outer = 0x1281cb980]
WARNING: NS_ENSURE_TRUE(mMutable) failed: file ../../../../netwerk/base/src/nsSimpleURI.cpp, line 272
WARNING: NS_ENSURE_TRUE(mMutable) failed: file ../../../../netwerk/base/src/nsSimpleURI.cpp, line 272
WARNING: NS_ENSURE_TRUE(frame) failed: file ../../../layout/base/nsPresContext.cpp, line 1179
WARNING: NS_ENSURE_TRUE(frame) failed: file ../../../layout/base/nsPresContext.cpp, line 1179
WARNING: NS_ENSURE_TRUE(frame) failed: file ../../../layout/base/nsPresContext.cpp, line 1179
++DOMWINDOW == 56 (0x150387478) [serial = 7289] [outer = 0x1281cb980]
WARNING: Unable to test style tree integrity -- no content node: file ../../../layout/base/nsCSSFrameConstructor.cpp, line 8267
TEST-PASS | chrome://mochitests/content/browser/browser/devtools/debugger/test/browser_dbg_chrome-debugging.js | Found a chrome debugging actor.
Assertion failure: !dst->compartment()->isCollecting(), at ../../../js/src/jsgc.cpp:4010
TEST-UNEXPECTED-FAIL | chrome://mochitests/content/browser/browser/devtools/debugger/test/browser_dbg_chrome-debugging.js | Exited with code 1 during test run
INFO | automation.py | Application ran for: 0:21:54.527508
INFO | automation.py | Reading PID log: /var/folders/7c/fqxs206n3dlcgjphjlbqjk6000000w/T/tmpnKkKJTpidlog
Downloading symbols from: http://ftp.mozilla.org/pub/mozilla.org/firefox/tinderbox-builds/mozilla-inbound-macosx64-debug/1354079312/firefox-20.0a1.en-US.mac64.crashreporter-symbols.zip
PROCESS-CRASH | chrome://mochitests/content/browser/browser/devtools/debugger/test/browser_dbg_chrome-debugging.js | application crashed (minidump found)
Crash dump filename: /var/folders/7c/fqxs206n3dlcgjphjlbqjk6000000w/T/tmpCIIQ8L/minidumps/D79E9359-EC94-4171-8DAC-1F1899DEDFB4.dmp
Operating system: Mac OS X
10.8.0 12A269
CPU: amd64
family 6 model 42 stepping 7
8 CPUs
Crash reason: EXC_BAD_ACCESS / KERN_INVALID_ADDRESS
Crash address: 0x0
Thread 0 (crashed)
0 XUL!EndMarkingCompartmentGroup [jsgcinlines.h : 460 + 0x0]
rbx = 0x00007fff7eb98c68 r12 = 0x000000016d272800
r13 = 0x00007fff5fbf65c0 r14 = 0x0000000104c8a000
r15 = 0x00007fff5fbf65b8 rip = 0x000000010302f64e
rsp = 0x00007fff5fbf6580 rbp = 0x00007fff5fbfa640
Found by: given as instruction pointer in context
1 XUL!IncrementalCollectSlice [jsgc.cpp : 4206 + 0x7]
rbx = 0x00007fff5fbfa758 r12 = 0x0000000104c8a000
r13 = 0x0000000103884be0 r14 = 0x00007fff5fbfa690
r15 = 0x0000000104c8a000 rip = 0x000000010302c414
rsp = 0x00007fff5fbfa650 rbp = 0x00007fff5fbfa7d0
Found by: call frame info
2 XUL!ResetIncrementalGC [jsgc.cpp : 4464 + 0x10]
rbx = 0x0000000104c8a000 r12 = 0x0000000000000000
r13 = 0x0000000000000000 r14 = 0x000000010369b4f6
r15 = 0x0000000104c8a000 rip = 0x000000010302b9a5
rsp = 0x00007fff5fbfa7e0 rbp = 0x00007fff5fbfa820
Found by: call frame info
3 XUL!GCCycle [jsgc.cpp : 4809 + 0x11]
rbx = 0x0000000104c8a000 r12 = 0x0000000000000000
r13 = 0x0000000000000000 r14 = 0x000000010369b4f6
r15 = 0x0000000104c8a000 rip = 0x000000010302b68a
rsp = 0x00007fff5fbfa830 rbp = 0x00007fff5fbfa870
Found by: call frame info
4 XUL!Collect [jsgc.cpp : 4931 + 0x14]
rbx = 0x0000000104c8a000 r12 = 0x0000000000000000
r13 = 0x0000000104c8a3f8 r14 = 0x0000000000000008
r15 = 0x0000000000000000 rip = 0x000000010302820c
rsp = 0x00007fff5fbfa880 rbp = 0x00007fff5fbfa8c0
Found by: call frame info
5 XUL!JSCompartment::addDebuggee(JSContext*, js::GlobalObject*) [jscompartment.h : 523 + 0xf]
rbx = 0x000000004c320aac r12 = 0x0000000100841e00
r13 = 0x0000000000000000 r14 = 0x0000000100174f90
r15 = 0x0000000100842501 rip = 0x0000000102ff449a
rsp = 0x00007fff5fbfa8d0 rbp = 0x00007fff5fbfa930
Found by: call frame info
6 XUL!js::Debugger::addDebuggeeGlobal(JSContext*, JS::Handle<js::GlobalObject*>) [Debugger.cpp : 2089 + 0xe]
rbx = 0x00007fff5fbfaa40 r12 = 0x0000000100174f90
r13 = 0x00007fff5fbfaa40 r14 = 0x000000016e999360
r15 = 0x00000001503505d0 rip = 0x00000001031a3599
rsp = 0x00007fff5fbfa940 rbp = 0x00007fff5fbfaa20
Found by: call frame info
7 XUL!js::Debugger::addDebuggee(JSContext*, unsigned int, JS::Value*) [Debugger.cpp : 1878 + 0xa]
rbx = 0x00000001503505d0 r12 = 0x0000000100174f90
r13 = 0x00007fff5fbfaab8 r14 = 0x000000010cc97310
r15 = 0x0000000000000000 rip = 0x00000001031a2f47
rsp = 0x00007fff5fbfaa30 rbp = 0x00007fff5fbfaa90
Found by: call frame info
8 XUL!js::CallJSNative(JSContext*, int (*)(JSContext*, unsigned int, JS::Value*), JS::CallArgs const&) [jscntxtinlines.h : 364 + 0x5]
rbx = 0x000000010cc97318 r12 = 0x00007fff5fbfabd0
r13 = 0x00007fff5fbfaab8 r14 = 0x0000000100174f90
r15 = 0x00000001031a2ec0 rip = 0x000000010306ee1c
rsp = 0x00007fff5fbfaaa0 rbp = 0x00007fff5fbfaaf0
Found by: call frame info
Reporter | ||
Updated•13 years ago
|
Summary: Intermittent Assertion failure: !thing->compartment()->scheduledForDestruction in browser_dbg_chrome-debugging.js [@ EndMarkingCompartmentGroup] → Intermittent Assertion failure: dst->compartment()->isCollecting() in browser_dbg_chrome-debugging.js [@ EndMarkingCompartmentGroup]
Reporter | ||
Updated•13 years ago
|
Summary: Intermittent Assertion failure: dst->compartment()->isCollecting() in browser_dbg_chrome-debugging.js [@ EndMarkingCompartmentGroup] → Intermittent Assertion failure: !dst->compartment()->isCollecting() in browser_dbg_chrome-debugging.js [@ EndMarkingCompartmentGroup]
Comment 1•13 years ago
|
||
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Assignee | ||
Updated•13 years ago
|
Assignee: general → jcoppeard
Status: NEW → ASSIGNED
Comment hidden (Legacy TBPL/Treeherder Robot) |
Assignee | ||
Comment 5•13 years ago
|
||
Change is to always sweep debugger and debugee objects in the same group, as I think was the original intention.
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Assignee | ||
Comment 15•13 years ago
|
||
The original assertion assumes that a compartment edge from A -> B means that A will not finish marking after B. However, the order is calculated at the start of the sweep phase, and new wrappers can be created after this point which break this assumption.
The fix is to update the assertion to ignore wrappers created during collection.
This necessitates moving the finding of black->gray into the marking code, because the areana's allocatedDuringIncremental flag is cleared after the arena has been marked. This also means that it's no longer necessary to iterate though every wrapper to check this.
Also included is the previous patch that ensures debugger and debuggee objects are always finalized in the same group.
Attachment #686133 -
Attachment is obsolete: true
Attachment #686562 -
Flags: review?(wmccloskey)
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Assignee | ||
Comment 18•13 years ago
|
||
As discussed with billm, this is a quick patch to disallow
Attachment #686652 -
Flags: review?(wmccloskey)
Assignee | ||
Comment 19•13 years ago
|
||
... to disallow creation of wrappers to gray objects, to see if we can get to the root of this problem.
We could probably do with factoring out all calls to JSCompartment::crossCompartmentWrappers.put() but I haven't done that yet.
Assignee | ||
Comment 20•13 years ago
|
||
Try push here: https://tbpl.mozilla.org/?tree=Try&rev=fcbff5f48f27
Comment on attachment 686652 [details] [diff] [review]
Patch to assert if a wrapper to a gray thing is created
I can check this in for you later today, once the try build finishes.
Attachment #686652 -
Flags: review?(wmccloskey) → review+
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
The try build is pretty revealing. I think that findAllGlobals and RecomputeWrappers need to call UnmarkGray. That means we'll have to move it to the JS engine. I'll work on that tomorrow. That should be enough to fix this problem, I suspect.
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment on attachment 686562 [details] [diff] [review]
Better potential fix
Review of attachment 686562 [details] [diff] [review]:
-----------------------------------------------------------------
::: js/src/gc/Marking.cpp
@@ +603,5 @@
> + * compartment that has already been marked gray.
> + */
> + if (cell->isMarked(GRAY)) {
> + JS_ASSERT_IF(!src->arenaHeader()->allocatedDuringIncremental,
> + !cell->compartment()->isCollecting());
Please remove the allocatedDuringIncremental condition.
Attachment #686562 -
Flags: review?(wmccloskey) → review+
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Assignee | ||
Updated•13 years ago
|
Whiteboard: [leave open]
Assignee | ||
Comment 37•13 years ago
|
||
https://hg.mozilla.org/integration/mozilla-inbound/rev/fc50a2127738
Not a fix, just a couple of improvements:
- sweep debugger and debugee objects in same group
- improve black->gray pointer detection
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment 39•13 years ago
|
||
This caused crashes in some of the unit tests, so I backed it out.
https://hg.mozilla.org/integration/mozilla-inbound/rev/70e354775e1b
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Assignee | ||
Comment 45•13 years ago
|
||
(In reply to Ehsan Akhgari [:ehsan] from comment #39)
> This caused crashes in some of the unit tests, so I backed it out.
Thanks. Can you point me at the tests that crashed?
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment hidden (Legacy TBPL/Treeherder Robot) |
Assignee | ||
Comment 48•13 years ago
|
||
I pushed this to try again and got a green build, so I'm re-landing it: https://tbpl.mozilla.org/?tree=Try&rev=0bad9e4bc457
I believe there was another GC-related patch that later got reverted that could have caused the failures.
https://hg.mozilla.org/integration/mozilla-inbound/rev/c7f71ff116c3
Comment 49•13 years ago
|
||
(In reply to comment #45)
> (In reply to Ehsan Akhgari [:ehsan] from comment #39)
> > This caused crashes in some of the unit tests, so I backed it out.
>
> Thanks. Can you point me at the tests that crashed?
Sorry I didn't put the links in the bug. FWIW you can go to the TBPL page for the inbound tree, and click the green "next" button at the end of the page enough number of times to get to your push the next time.
Comment 50•13 years ago
|
||
Flags: in-testsuite+
The problem here is that Debugger::findAllGlobals plucks global objects directly out of the compartment. There's no assurance that these globals are marked black--they could be gray. Then it exposes them to JS code.
Attachment #688062 -
Flags: review?(continuation)
Forgot qref.
Attachment #688062 -
Attachment is obsolete: true
Attachment #688062 -
Flags: review?(continuation)
Attachment #688063 -
Flags: review?(continuation)
Comment 54•13 years ago
|
||
Comment on attachment 688063 [details] [diff] [review]
fix for black-to-gray edge from debugger, v2
Review of attachment 688063 [details] [diff] [review]:
-----------------------------------------------------------------
::: js/public/HeapAPI.h
@@ +78,5 @@
> + * engine (by handing it to running JS code or writing it into live JS
> + * data). During incremental GC, since the gray bits haven't been computed yet,
> + * we conservatively mark the object black.
> + */
> +static inline void
This should be MOZ_ALWAYS_INLINE.
@@ +79,5 @@
> + * data). During incremental GC, since the gray bits haven't been computed yet,
> + * we conservatively mark the object black.
> + */
> +static inline void
> +ExposeGCThingToJS(void *thing, JSGCTraceKind kind)
This name is slightly weird. Aren't JS objects always exposed to JS? I mean, I know what you mean, but maybe something like ExposeGCThingToLiveJS? ToActiveJS? etc. Well, "live" isn't that great either, given that gray JS is still alive...
::: js/src/jsfriendapi.cpp
@@ +893,5 @@
> return IsIncrementalBarrierNeeded(cx->runtime);
> }
>
> JS_FRIEND_API(bool)
> +js::IsIncrementalBarrierNeededOnGCThing(void *thing, JSGCTraceKind kind)
Why do you have this |kind| argument you never use?
::: js/src/jsfriendapi.h
@@ -11,5 @@
> #include "jscpucfg.h"
> #include "jspubtd.h"
> #include "jsprvtd.h"
>
> -#include "js/HeapAPI.h"
I hope you checked that this compiles. ;)
Attachment #688063 -
Flags: review?(continuation) → review+
https://hg.mozilla.org/integration/mozilla-inbound/rev/97bdf3a66177
I've been trying to pass around the thing kind more often just because we'll probably need it for generational collection.
Updated•13 years ago
|
Crash Signature: [@ EndMarkingCompartmentGroup] → [@ EndMarkingCompartmentGroup]
[@ ShouldMarkCrossCompartment]
Summary: Intermittent Assertion failure: !dst->compartment()->isCollecting() in browser_dbg_chrome-debugging.js [@ EndMarkingCompartmentGroup] → Intermittent Assertion failure: !dst->compartment()->isCollecting() in browser_dbg_chrome-debugging.js [@ EndMarkingCompartmentGroup] (now [@ ShouldMarkCrossCompartment])
Comment hidden (Legacy TBPL/Treeherder Robot) |
Comment 57•13 years ago
|
||
Comment hidden (Legacy TBPL/Treeherder Robot) |
This looks fixed.
Status: ASSIGNED → RESOLVED
Closed: 13 years ago
Resolution: --- → FIXED
Updated•12 years ago
|
Whiteboard: [leave open]
Target Milestone: --- → mozilla20
You need to log in
before you can comment on or make changes to this bug.
Description
•