Closed Bug 1188364 Opened 9 years ago Closed 8 years ago

Intermittent test_Range-insertNode.html,test_Range-surroundContents.html | application crashed [@ nsWrapperCache::UpdateWrapper(JSObject*, JSObject const*)] (Assertion failure: mWrapper == aOldObject, at nsWrapperCache.h:143)

Categories

(Core :: DOM: Core & HTML, defect)

Other Branch
x86_64
Linux
defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla47
Tracking Status
firefox45 --- wontfix
firefox46 --- wontfix
firefox47 --- fixed
firefox-esr45 --- wontfix

People

(Reporter: RyanVM, Assigned: jonco)

References

Details

(Keywords: assertion, crash, intermittent-failure)

Attachments

(1 file)

15:16:21 INFO - 879 INFO TEST-START | dom/imptests/html/dom/ranges/test_Range-insertNode.html
15:16:34 INFO - Assertion failure: mWrapper == aOldObject, at /builds/slave/fx-team-lx-d-00000000000000000/build/src/dom/base/nsWrapperCache.h:143
15:16:58 INFO - #01: nsWrapperCache::UpdateWrapper(JSObject*, JSObject const*) [dom/base/nsWrapperCache.h:143]
15:16:58 INFO - #02: mozilla::dom::HTMLHtmlElementBinding::_objectMoved [dom/bindings/BindingUtils.h:1290]
15:16:58 INFO - #03: RelocateCell [js/src/jsgc.cpp:2037]
15:16:58 INFO - #04: RelocateArena [js/src/jsgc.cpp:2068]
15:16:58 INFO - #05: js::gc::ArenaList::relocateArenas(js::gc::ArenaHeader*, js::gc::ArenaHeader*, js::SliceBudget&, js::gcstats::Statistics&) [js/src/jsgc.cpp:2102]
15:16:58 INFO - #06: js::gc::ArenaLists::relocateArenas(js::gc::ArenaHeader*&, JS::gcreason::Reason, js::SliceBudget&, js::gcstats::Statistics&) [js/src/jsgc.cpp:2175]
15:16:58 INFO - #07: js::gc::GCRuntime::relocateArenas(JS::Zone*, JS::gcreason::Reason, js::SliceBudget&) [js/src/jsgc.cpp:2200]
15:16:58 INFO - #08: js::gc::GCRuntime::compactPhase(JS::gcreason::Reason, js::SliceBudget&) [js/src/jsgc.cpp:5439]
15:16:58 INFO - #09: js::gc::GCRuntime::incrementalCollectSlice(js::SliceBudget&, JS::gcreason::Reason) [js/src/jsgc.cpp:5881]
15:16:58 INFO - #10: js::gc::GCRuntime::gcCycle(bool, js::SliceBudget&, JS::gcreason::Reason) [js/src/jsgc.cpp:6050]
15:16:58 INFO - #11: js::gc::GCRuntime::collect(bool, js::SliceBudget, JS::gcreason::Reason) [js/src/jsgc.cpp:6161]
15:16:58 INFO - #12: js::gc::GCRuntime::gcSlice(JS::gcreason::Reason, long long) [js/src/jsgc.cpp:6238]
15:16:58 INFO - #13: js::gc::GCRuntime::gcIfRequested(JSContext*) [js/src/jsgc.cpp:6468]
15:16:58 INFO - #14: js::gc::GCRuntime::gcIfNeededPerAllocation(JSContext*) [js/src/gc/Allocator.cpp:39]
15:16:58 INFO - #15: JSObject* js::Allocate<JSObject, (js::AllowGC)1>(js::ExclusiveContext*, js::gc::AllocKind, unsigned int, js::gc::InitialHeap, js::Class const*) [js/src/gc/Allocator.cpp:55]
15:16:58 INFO - #16: JSObject::create(js::ExclusiveContext*, js::gc::AllocKind, js::gc::InitialHeap, JS::Handle<js::Shape*>, JS::Handle<js::ObjectGroup*>) [js/src/jsobjinlines.h:315]
15:16:58 INFO - #17: NewObject [js/src/jsobj.cpp:686]
15:16:58 INFO - #18: js::NewObjectWithGivenTaggedProto(js::ExclusiveContext*, js::Class const*, JS::Handle<js::TaggedProto>, js::gc::AllocKind, js::NewObjectKind, unsigned int) [js/public/RootingAPI.h:648]
15:16:58 INFO - #19: js::ProxyObject::New(JSContext*, js::BaseProxyHandler const*, JS::Handle<JS::Value>, js::TaggedProto, js::ProxyOptions const&) [js/public/RootingAPI.h:649]
15:16:58 INFO - #20: js::NewProxyObject(JSContext*, js::BaseProxyHandler const*, JS::Handle<JS::Value>, JSObject*, js::ProxyOptions const&) [js/src/proxy/Proxy.cpp:743]
15:16:58 INFO - #21: js::Wrapper::New(JSContext*, JSObject*, js::Wrapper const*, js::WrapperOptions const&) [js/src/proxy/Wrapper.cpp:40]
15:16:58 INFO - #22: xpc::WrapperFactory::Rewrap(JSContext*, JS::Handle<JSObject*>, JS::Handle<JSObject*>) [js/src/jswrapper.h:22]
15:16:58 INFO - #23: JSCompartment::wrap(JSContext*, JS::MutableHandle<JSObject*>, JS::Handle<JSObject*>) [js/src/jscompartment.cpp:459]
15:16:58 INFO - #24: JS_WrapObject(JSContext*, JS::MutableHandle<JSObject*>) [js/src/jscntxt.cpp:1194]
15:16:58 INFO - #25: JS_TransplantObject(JSContext*, JS::Handle<JSObject*>, JS::Handle<JSObject*>) [js/src/jsapi.cpp:1127]
15:16:58 INFO - #26: xpc::TransplantObject(JSContext*, JS::Handle<JSObject*>, JS::Handle<JSObject*>) [js/xpconnect/wrappers/WrapperFactory.cpp:609]
15:16:58 INFO - #27: mozilla::dom::ReparentWrapper(JSContext*, JS::Handle<JSObject*>) [dom/bindings/BindingUtils.cpp:1906]
15:16:58 INFO - #28: nsNodeUtils::CloneAndAdopt(nsINode*, bool, bool, nsNodeInfoManager*, JS::Handle<JSObject*>, nsCOMArray<nsINode>&, nsINode*, nsINode**) [dom/base/nsNodeUtils.cpp:568]
15:16:58 INFO - #29: nsIDocument::AdoptNode(nsINode&, mozilla::ErrorResult&) [dom/base/nsNodeUtils.h:200]
15:16:58 INFO - #30: nsDocument::AdoptNode(nsIDOMNode*, nsIDOMNode**) [dom/base/nsDocument.cpp:7698]
15:16:58 INFO - #31: AdoptNodeIntoOwnerDoc [dom/base/nsINode.cpp:1483]
15:16:58 INFO - #32: nsINode::ReplaceOrInsertBefore(bool, nsINode*, nsINode*, mozilla::ErrorResult&) [dom/bindings/ErrorResult.h:151]
15:16:58 INFO - #33: mozilla::dom::NodeBinding::appendChild [obj-firefox/dom/bindings/NodeBinding.cpp:621]
15:16:58 INFO - #34: mozilla::dom::GenericBindingMethod(JSContext*, unsigned int, JS::Value*) [dom/bindings/BindingUtils.cpp:2595]
15:16:58 INFO - #35: js::CallJSNative(JSContext*, bool (*)(JSContext*, unsigned int, JS::Value*), JS::CallArgs const&) [js/src/jscntxtinlines.h:236]
15:16:58 INFO - #36: js::Invoke(JSContext*, JS::CallArgs, js::MaybeConstruct) [js/src/vm/Interpreter.cpp:720]
15:16:58 INFO - #37: js::Invoke(JSContext*, JS::Value const&, JS::Value const&, unsigned int, JS::Value const*, JS::MutableHandle<JS::Value>) [js/src/vm/Interpreter.cpp:775]
15:16:58 INFO - #38: js::DirectProxyHandler::call(JSContext*, JS::Handle<JSObject*>, JS::CallArgs const&) const [js/src/proxy/DirectProxyHandler.cpp:77]
15:16:58 INFO - #39: js::CrossCompartmentWrapper::call(JSContext*, JS::Handle<JSObject*>, JS::CallArgs const&) const [js/src/proxy/CrossCompartmentWrapper.cpp:289]
15:16:58 INFO - #40: js::Proxy::call(JSContext*, JS::Handle<JSObject*>, JS::CallArgs const&) [js/src/proxy/Proxy.cpp:391]
15:16:58 INFO - #41: js::proxy_Call(JSContext*, unsigned int, JS::Value*) [js/src/proxy/Proxy.cpp:697]
15:16:58 INFO - #42: js::CallJSNative(JSContext*, bool (*)(JSContext*, unsigned int, JS::Value*), JS::CallArgs const&) [js/src/jscntxtinlines.h:236]
15:16:58 INFO - #43: js::Invoke(JSContext*, JS::CallArgs, js::MaybeConstruct) [js/src/vm/Interpreter.cpp:708]
15:16:58 INFO - #44: js::Invoke(JSContext*, JS::Value const&, JS::Value const&, unsigned int, JS::Value const*, JS::MutableHandle<JS::Value>) [js/src/vm/Interpreter.cpp:775]
15:16:58 INFO - #45: js::jit::InvokeFunction(JSContext*, JS::Handle<JSObject*>, bool, unsigned int, JS::Value*, JS::MutableHandle<JS::Value>) [mfbt/GuardObjects.h:119]
15:16:58 INFO - #46: ??? (???:???)
15:16:58 INFO - #47: ??? (???:???)
15:16:58 INFO - ###!!! [Parent][MessageChannel] Error: (msgtype=0x200081,name=PBrowser::Msg_Destroy) Channel error: cannot send/recv
15:22:28 INFO - 880 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | Range.insertNode() tests - Range.insertNode() tests: Elided 100 passes or known failures.
15:22:28 INFO - 881 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | 2,5: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedPara1 - 2,5: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedPara1
15:22:28 INFO - 882 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | Range.insertNode() tests - Range.insertNode() tests: Elided 100 passes or known failures.
15:22:28 INFO - 883 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | 4,11: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node xmlDoc - 4,11: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node xmlDoc
15:22:28 INFO - 884 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | Range.insertNode() tests - Range.insertNode() tests: Elided 100 passes or known failures.
15:22:28 INFO - 885 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | 6,17: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node comment - 6,17: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node comment
15:22:28 INFO - 886 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | Range.insertNode() tests - Range.insertNode() tests: Elided 100 passes or known failures.
15:22:28 INFO - 887 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | 9,1: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node paras[0].firstChild - 9,1: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node paras[0].firstChild
15:22:28 INFO - 888 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | Range.insertNode() tests - Range.insertNode() tests: Elided 100 passes or known failures.
15:22:28 INFO - 889 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | 11,7: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node document - 11,7: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node document
15:22:28 INFO - 890 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | Range.insertNode() tests - Range.insertNode() tests: Elided 100 passes or known failures.
15:22:28 INFO - 891 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | 13,13: resulting range position for range [document.head, 1, document.head, 1], node detachedTextNode - 13,13: resulting range position for range [document.head, 1, document.head, 1], node detachedTextNode
15:22:28 INFO - 892 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | Range.insertNode() tests - Range.insertNode() tests: Elided 100 passes or known failures.
15:22:28 INFO - 893 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | 15,19: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node docfrag - 15,19: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node docfrag
15:22:28 INFO - 894 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | Range.insertNode() tests - Range.insertNode() tests: Elided 100 passes or known failures.
15:22:28 INFO - 895 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | 18,3: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignPara1 - 18,3: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignPara1
15:22:28 INFO - 896 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | Range.insertNode() tests - Range.insertNode() tests: Elided 100 passes or known failures.
15:22:28 INFO - 897 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | 20,9: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node foreignDoc - 20,9: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node foreignDoc
15:22:28 INFO - 898 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | Range.insertNode() tests - Range.insertNode() tests: Elided 100 passes or known failures.
15:22:28 INFO - 899 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | 22,15: resulting range position for range [testDiv, 2, paras[4], 1], node processingInstruction - 22,15: resulting range position for range [testDiv, 2, paras[4], 1], node processingInstruction
15:22:28 INFO - 900 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | Range.insertNode() tests - Range.insertNode() tests: Elided 100 passes or known failures.
15:22:28 INFO - 901 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | 24,21: resulting range position for range [document, 0, document, 2], node foreignDoctype - 24,21: resulting range position for range [document, 0, document, 2], node foreignDoctype
15:22:28 INFO - 902 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | Range.insertNode() tests - Range.insertNode() tests: Elided 100 passes or known failures.
15:22:28 INFO - 903 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | 27,5: resulting range position for range [foreignDoc, 1, foreignComment, 2], node detachedPara1 - 27,5: resulting range position for range [foreignDoc, 1, foreignComment, 2], node detachedPara1
15:22:28 INFO - 904 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | Range.insertNode() tests - Range.insertNode() tests: Elided 100 passes or known failures.
15:22:28 INFO - 905 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | 29,11: resulting range position for range [xmlDoc, 1, xmlComment, 0], node xmlDoc - 29,11: resulting range position for range [xmlDoc, 1, xmlComment, 0], node xmlDoc
15:22:28 INFO - 906 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | Range.insertNode() tests - Range.insertNode() tests: Elided 100 passes or known failures.
15:22:28 INFO - 907 INFO TEST-PASS | dom/imptests/html/dom/ranges/test_Range-insertNode.html | 31,17: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node comment - 31,17: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node comment
15:22:28 WARNING - TEST-UNEXPECTED-TIMEOUT | dom/imptests/html/dom/ranges/test_Range-insertNode.html | application timed out after 330 seconds with no output
15:22:29 INFO - Failed to start /builds/slave/test/build/tests/bin/screentopng for screenshot: No such file or directory
15:22:29 INFO - TEST-INFO | Main app process: killed by SIGIOT
15:22:29 WARNING - TEST-UNEXPECTED-FAIL | dom/imptests/html/dom/ranges/test_Range-insertNode.html | application terminated with exit code 6
15:22:29 INFO - runtests.py | Application ran for: 0:18:44.112959
15:22:29 INFO - zombiecheck | Reading PID log: /tmp/tmpUtHR8Ppidlog
15:22:29 INFO - ==> process 1921 launched child process 1976
15:22:29 INFO - zombiecheck | Checking for orphan process with PID: 1976
15:22:43 INFO - mozcrash Saved minidump as /builds/slave/test/build/blobber_upload_dir/277e9f48-4492-2eb4-2e84d864-5f46e283.dmp
15:22:43 INFO - mozcrash Saved app info as /builds/slave/test/build/blobber_upload_dir/277e9f48-4492-2eb4-2e84d864-5f46e283.extra
15:22:43 WARNING - PROCESS-CRASH | dom/imptests/html/dom/ranges/test_Range-insertNode.html | application crashed [@ linux-gate.so + 0x424]
15:22:56 WARNING - PROCESS-CRASH | dom/imptests/html/dom/ranges/test_Range-insertNode.html | application crashed [@ nsWrapperCache::UpdateWrapper(JSObject*, JSObject const*)]
15:22:56 INFO - Crash dump filename: /tmp/tmp9q5uWW.mozrunner/minidumps/659303ea-e865-e87e-563ab1f5-02acc893.dmp
15:22:56 INFO - Operating system: Linux
15:22:56 INFO - 0.0.0 Linux 3.2.0-76-generic-pae #111-Ubuntu SMP Tue Jan 13 22:34:29 UTC 2015 i686
15:22:56 INFO - CPU: x86
15:22:56 INFO - GenuineIntel family 6 model 62 stepping 4
15:22:56 INFO - 1 CPU
15:22:56 INFO - Crash reason: SIGSEGV
15:22:56 INFO - Crash address: 0x0
15:22:56 INFO - Thread 0 (crashed)
15:22:56 INFO - 0 libxul.so!nsWrapperCache::UpdateWrapper(JSObject*, JSObject const*) [nsWrapperCache.h:da4b14a3178a : 143 + 0x1d]
15:22:56 INFO - eip = 0xb339e8bb esp = 0xbf9a1890 ebp = 0xbf9a18a8 ebx = 0xb7631624
15:22:56 INFO - esi = 0x9797a8e0 edi = 0xbf9a18dc eax = 0x00000000 ecx = 0xb233a8ac
15:22:56 INFO - edx = 0x00000000 efl = 0x00010282
15:22:56 INFO - Found by: given as instruction pointer in context
15:22:56 INFO - 1 libxul.so!mozilla::dom::HTMLHtmlElementBinding::_objectMoved [BindingUtils.h:da4b14a3178a : 1290 + 0x6]
15:22:56 INFO - eip = 0xb38c7aac esp = 0xbf9a18b0 ebp = 0xbf9a18f8 ebx = 0xb7631624
15:22:56 INFO - esi = 0x97969640 edi = 0xbf9a18dc
15:22:56 INFO - Found by: call frame info
15:22:56 INFO - 2 libxul.so!RelocateCell [jsgc.cpp:da4b14a3178a : 2037 + 0xe]
15:22:56 INFO - eip = 0xb545fa51 esp = 0xbf9a1900 ebp = 0xbf9a1958 ebx = 0xb7631624
15:22:56 INFO - esi = 0x9797a8e0 edi = 0x9797a8e0
15:22:56 INFO - Found by: call frame info
15:22:56 INFO - 3 libxul.so!RelocateArena [jsgc.cpp:da4b14a3178a : 2068 + 0x13]
15:22:56 INFO - eip = 0xb545fe38 esp = 0xbf9a1960 ebp = 0xbf9a19f8 ebx = 0xb7631624
15:22:56 INFO - esi = 0x00000002 edi = 0xbf9a1da8
15:22:56 INFO - Found by: call frame info
15:22:56 INFO - 4 libxul.so!js::gc::ArenaList::relocateArenas(js::gc::ArenaHeader*, js::gc::ArenaHeader*, js::SliceBudget&, js::gcstats::Statistics&) [jsgc.cpp:da4b14a3178a : 2100 + 0x7]
15:22:56 INFO - eip = 0xb54603aa esp = 0xbf9a1a00 ebp = 0xbf9a1a28 ebx = 0xb7631624
15:22:56 INFO - esi = 0x9797a000 edi = 0x97f4c000
15:22:56 INFO - Found by: call frame info
15:22:56 INFO - 5 libxul.so!js::gc::ArenaLists::relocateArenas(js::gc::ArenaHeader*&, JS::gcreason::Reason, js::SliceBudget&, js::gcstats::Statistics&) [jsgc.cpp:da4b14a3178a : 2175 + 0x28]
15:22:56 INFO - eip = 0xb54605a5 esp = 0xbf9a1a30 ebp = 0xbf9a1b08 ebx = 0xb7631624
15:22:56 INFO - esi = 0x97f58000 edi = 0x00000002
15:22:56 INFO - Found by: call frame info
15:22:56 INFO - 6 libxul.so!js::gc::GCRuntime::relocateArenas(JS::Zone*, JS::gcreason::Reason, js::SliceBudget&) [jsgc.cpp:da4b14a3178a : 2200 + 0x28]
15:22:56 INFO - eip = 0xb546087d esp = 0xbf9a1b10 ebp = 0xbf9a1b98 ebx = 0xb7631624
15:22:56 INFO - esi = 0xa7c12800 edi = 0xad9053e0
15:22:56 INFO - Found by: call frame info
15:22:56 INFO - 7 libxul.so!js::gc::GCRuntime::compactPhase(JS::gcreason::Reason, js::SliceBudget&) [jsgc.cpp:da4b14a3178a : 5439 + 0x1c]
15:22:56 INFO - eip = 0xb5460db0 esp = 0xbf9a1ba0 ebp = 0xbf9a1be8 ebx = 0xb7631624
15:22:56 INFO - esi = 0xad90703c edi = 0xa7c12800
15:22:56 INFO - Found by: call frame info
15:22:56 INFO - 8 libxul.so!js::gc::GCRuntime::incrementalCollectSlice(js::SliceBudget&, JS::gcreason::Reason) [jsgc.cpp:da4b14a3178a : 5881 + 0x15]
15:22:56 INFO - eip = 0xb5461339 esp = 0xbf9a1bf0 ebp = 0xbf9a1c48 ebx = 0xb7631624
15:22:56 INFO - esi = 0xad9011b0 edi = 0x00000000
15:22:56 INFO - Found by: call frame info
15:22:56 INFO - 9 libxul.so!js::gc::GCRuntime::gcCycle(bool, js::SliceBudget&, JS::gcreason::Reason) [jsgc.cpp:da4b14a3178a : 6047 + 0x15]
15:22:56 INFO - eip = 0xb546227e esp = 0xbf9a1c50 ebp = 0xbf9a1cb8 ebx = 0xb7631624
15:22:56 INFO - esi = 0xbf9a1c90 edi = 0xad9011b0
15:22:56 INFO - Found by: call frame info
15:22:56 INFO - 10 libxul.so!js::gc::GCRuntime::collect(bool, js::SliceBudget, JS::gcreason::Reason) [jsgc.cpp:da4b14a3178a : 6161 + 0x1a]
15:22:56 INFO - eip = 0xb546260d esp = 0xbf9a1cc0 ebp = 0xbf9a1d98 ebx = 0xb7631624
15:22:56 INFO - esi = 0xad9011b0 edi = 0x00000008
15:22:56 INFO - Found by: call frame info
Summary: Intermittent test_Range-insertNode.html | application crashed [@ nsWrapperCache::UpdateWrapper(JSObject*, JSObject const*)] (Assertion failure: mWrapper == aOldObject, at nsWrapperCache.h:143) → Intermittent test_Range-insertNode.html,test_Range-surroundContents.html | application crashed [@ nsWrapperCache::UpdateWrapper(JSObject*, JSObject const*)] (Assertion failure: mWrapper == aOldObject, at nsWrapperCache.h:143)
This seems to happen rarely, though a bit more often recently.
I wonder if the events-in-nursery change, or some other GC related change has made this more common.
But the bug is old anyhow.
Flags: needinfo?(terrence)
Flags: needinfo?(jcoppeard)
I didn't immediately notice that the crash is happening if we compact while inside JS_TransplantObject().

Wrappers created by the DOM can have a pointer to a native object in one of their slots.  What's happening here is that a compacting GC is observing an intermediate state where some object has been moved but its wrappers have not been updated to point to the new location.

I think disabling compacting GC while we are transplanting would be a very good thing.

The patch adds an AutoDisableCompactingGC to this path and updates the class to also finish any incremental compacting GC that is in progress.  I removed some now unneeded braces.

I also made js::RemapWrapper() infallible rather than always returning true, and added a missing return value check after adding a wrapper to the map.
Assignee: nobody → jcoppeard
Flags: needinfo?(jcoppeard)
Attachment #8718830 - Flags: review?(terrence)
Comment on attachment 8718830 [details] [diff] [review]
bug1188364-gc-in-transplant

Review of attachment 8718830 [details] [diff] [review]:
-----------------------------------------------------------------

::: js/src/proxy/CrossCompartmentWrapper.cpp
@@ +553,5 @@
>      // Update the entry in the compartment's wrapper map to point to the old
>      // wrapper, which has now been updated (via reuse or swap).
>      MOZ_ASSERT(wobj->is<WrapperObject>());
> +    if (!wcompartment->putWrapper(cx, CrossCompartmentKey(newTarget), ObjectValue(*wobj)))
> +        MOZ_CRASH();

Oh, wow, we really should be much, much more aggressive with our use of MOZ_WARN_UNUSED_RESULT.
Attachment #8718830 - Flags: review?(terrence) → review+
https://hg.mozilla.org/mozilla-central/rev/49868bdea8c8
Status: NEW → RESOLVED
Closed: 8 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla47
Filed bug 1248681 to add MOZ_WARN_UNUSED_RESULT annotations.
Flags: needinfo?(terrence)
Depends on: 1224026
Component: DOM → DOM: Core & HTML
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: