| | 38 | 8. Now you could start doing manual debugging of ref() and deref() to try to figure out where the extra ref() is happening. But there's a better way. |
| | 39 | 1. Apply the most recent patch from [https://bugs.webkit.org/show_bug.cgi?id=186269] (if this has not been checked in yet) and build. |
| | 40 | 2. Repeat the above steps. Now the output will be something like: |
| | 41 | {{{ |
| | 42 | 2 live documents: |
| | 43 | Document 0x630002400 (refCount 5, referencingNodeCount 1) file:///Volumes/Data/Development/apple/webkit/OpenSource/LayoutTests/fast/forms/textarea-paste-newline.html |
| | 44 | Document 0x630002400 reference stacks: |
| | 45 | Backtrace for token 6074 |
| | 46 | 1 0x6179baa97 WebCore::Node::ref() |
| | 47 | 2 0x615af576e unsigned int WTF::refIfNotNull<WebCore::Node>(WebCore::Node*) |
| | 48 | 3 0x615af5728 WTF::RefPtr<WebCore::Node, WTF::DumbPtrTraits<WebCore::Node> >::RefPtr(WebCore::Node*) |
| | 49 | 4 0x615af4add WTF::RefPtr<WebCore::Node, WTF::DumbPtrTraits<WebCore::Node> >::RefPtr(WebCore::Node*) |
| | 50 | 5 0x615af4b73 WTF::RefPtr<WebCore::Node, WTF::DumbPtrTraits<WebCore::Node> >::operator=(WebCore::Node*) |
| | 51 | 6 0x61788ccb2 WebCore::Document::removeFocusNavigationNodeOfSubtree(WebCore::Node&, bool) |
| | 52 | 7 0x61788c82a WebCore::Document::nodeChildrenWillBeRemoved(WebCore::ContainerNode&) |
| | 53 | 8 0x6178252de WebCore::ContainerNode::removeAllChildrenWithScriptAssertion(WebCore::ContainerNode::ChildChangeSource, WebCore::ContainerNode::DeferChildrenChanged) |
| | 54 | 9 0x617828d49 WebCore::ContainerNode::removeChildren() |
| | 55 | 10 0x617882aef WebCore::Document::implicitOpen() |
| | 56 | 11 0x617878043 WebCore::Document::open(WebCore::Document*) |
| | 57 | 12 0x617884062 WebCore::Document::write(WebCore::Document*, WebCore::SegmentedString&&) |
| | 58 | 13 0x61788432b WebCore::Document::write(WebCore::Document*, WTF::Vector<WTF::String, 0ul, WTF::CrashOnOverflow, 16ul>&&) |
| | 59 | 14 0x61609d242 WebCore::jsDocumentPrototypeFunctionWriteBody(JSC::ExecState*, WebCore::JSDocument*, JSC::ThrowScope&) |
| | 60 | 15 0x61608046e long long WebCore::IDLOperation<WebCore::JSDocument>::call<&(WebCore::jsDocumentPrototypeFunctionWriteBody(JSC::ExecState*, WebCore::JSDocument*, JSC::ThrowScope&)), (WebCore::CastedThisErrorBehavior)0>(JSC::ExecState&, char const*) |
| | 61 | 16 0x61608016c WebCore::jsDocumentPrototypeFunctionWrite(JSC::ExecState*) |
| | 62 | 17 0xeef1324177 |
| | 63 | 18 0x62650d44b llint_entry |
| | 64 | 19 0x62650d44b llint_entry |
| | 65 | 20 0x626504e37 vmEntryToJavaScript |
| | 66 | 21 0x6270a7c7a JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*) |
| | 67 | 22 0x6270a8303 JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&) |
| | 68 | 23 0x627356dce JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&) |
| | 69 | 24 0x627356eac JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&, WTF::NakedPtr<JSC::Exception>&) |
| | 70 | 25 0x62735717d JSC::profiledCall(JSC::ExecState*, JSC::ProfilingReason, JSC::JSValue, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&, WTF::NakedPtr<JSC::Exception>&) |
| | 71 | 26 0x617351ffb WebCore::JSExecState::profiledCall(JSC::ExecState*, JSC::ProfilingReason, JSC::JSValue, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&, WTF::NakedPtr<JSC::Exception>&) |
| | 72 | 27 0x617398407 WebCore::JSEventListener::handleEvent(WebCore::ScriptExecutionContext&, WebCore::Event&) |
| | 73 | 28 0x617960d3e WebCore::EventTarget::fireEventListeners(WebCore::Event&, WTF::Vector<WTF::RefPtr<WebCore::RegisteredEventListener, WTF::DumbPtrTraits<WebCore::RegisteredEventListener> >, 1ul, WTF::CrashOnOverflow, 16ul>) |
| | 74 | 29 0x61795c7a0 WebCore::EventTarget::fireEventListeners(WebCore::Event&) |
| | 75 | 30 0x61824752d WebCore::DOMWindow::dispatchEvent(WebCore::Event&, WebCore::EventTarget*) |
| | 76 | 31 0x6182523de WebCore::DOMWindow::dispatchLoadEvent() |
| | 77 | 32 0x6178839fa WebCore::Document::dispatchWindowLoadEvent() |
| | 78 | 33 0x61787bff3 WebCore::Document::implicitClose() |
| | 79 | 34 0x6180d6f2b WebCore::FrameLoader::checkCallImplicitClose() |
| | 80 | 35 0x6180d69c8 WebCore::FrameLoader::checkCompleted() |
| | 81 | 36 0x6180d58f5 WebCore::FrameLoader::finishedParsing() |
| | 82 | 37 0x617895ca9 WebCore::Document::finishedParsing() |
| | 83 | 38 0x617e3df58 WebCore::HTMLConstructionSite::finishedParsing() |
| | 84 | 39 0x617e8c969 WebCore::HTMLTreeBuilder::finished() |
| | 85 | 40 0x617e4708c WebCore::HTMLDocumentParser::end() |
| | 86 | 41 0x617e440e9 WebCore::HTMLDocumentParser::attemptToRunDeferredScriptsAndEnd() |
| | 87 | 42 0x617e43de3 WebCore::HTMLDocumentParser::prepareToStopParsing() |
| | 88 | 43 0x617e470ff WebCore::HTMLDocumentParser::attemptToEnd() |
| | 89 | 44 0x617e471d8 WebCore::HTMLDocumentParser::finish() |
| | 90 | 45 0x6180c55fe WebCore::DocumentWriter::end() |
| | 91 | 46 0x618084a1f WebCore::DocumentLoader::finishedLoading() |
| | 92 | 47 0x6180847bf WebCore::DocumentLoader::notifyFinished(WebCore::CachedResource&) |
| | 93 | 48 0x6181c7fdf WebCore::CachedResource::checkNotify() |
| | 94 | 49 0x6181ba091 WebCore::CachedResource::finishLoading(WebCore::SharedBuffer*) |
| | 95 | 50 0x6181c4ec2 WebCore::CachedRawResource::finishLoading(WebCore::SharedBuffer*) |
| | 96 | 51 0x618155a58 WebCore::SubresourceLoader::didFinishLoading(WebCore::NetworkLoadMetrics const&) |
| | 97 | 52 0x610f6d50b WebKit::WebResourceLoader::didFinishResourceLoad(WebCore::NetworkLoadMetrics const&) |
| | 98 | 53 0x610f71b8a void IPC::callMemberFunctionImpl<WebKit::WebResourceLoader, void (WebKit::WebResourceLoader::*)(WebCore::NetworkLoadMetrics const&), std::__1::tuple<WebCore::NetworkLoadMetrics>, 0ul>(WebKit::WebResourceLoader*, void (WebKit::WebResourceLoader::*)(WebCore::NetworkLoadMetrics const&), std::__1::tuple<WebCore::NetworkLoadMetrics>&&, std::__1::integer_sequence<unsigned long, 0ul>) |
| | 99 | 54 0x610f71a10 void IPC::callMemberFunction<WebKit::WebResourceLoader, void (WebKit::WebResourceLoader::*)(WebCore::NetworkLoadMetrics const&), std::__1::tuple<WebCore::NetworkLoadMetrics>, std::__1::integer_sequence<unsigned long, 0ul> >(std::__1::tuple<WebCore::NetworkLoadMetrics>&&, WebKit::WebResourceLoader*, void (WebKit::WebResourceLoader::*)(WebCore::NetworkLoadMetrics const&)) |
| | 100 | 55 0x610f70bea void IPC::handleMessage<Messages::WebResourceLoader::DidFinishResourceLoad, WebKit::WebResourceLoader, void (WebKit::WebResourceLoader::*)(WebCore::NetworkLoadMetrics const&)>(IPC::Decoder&, WebKit::WebResourceLoader*, void (WebKit::WebResourceLoader::*)(WebCore::NetworkLoadMetrics const&)) |
| | 101 | 56 0x610f701fc WebKit::WebResourceLoader::didReceiveWebResourceLoaderMessage(IPC::Connection&, IPC::Decoder&) |
| | 102 | 57 0x6103c73a9 WebKit::NetworkProcessConnection::didReceiveMessage(IPC::Connection&, IPC::Decoder&) |
| | 103 | 58 0x610774e3c IPC::Connection::dispatchMessage(IPC::Decoder&) |
| | 104 | 59 0x6107679ad IPC::Connection::dispatchMessage(std::__1::unique_ptr<IPC::Decoder, std::__1::default_delete<IPC::Decoder> >) |
| | 105 | 60 0x6107759f7 IPC::Connection::dispatchOneIncomingMessage() |
| | 106 | 61 0x610793bc8 IPC::Connection::enqueueIncomingMessage(std::__1::unique_ptr<IPC::Decoder, std::__1::default_delete<IPC::Decoder> >)::$_14::operator()() |
| | 107 | 62 0x610793ad9 WTF::Function<void ()>::CallableWrapper<IPC::Connection::enqueueIncomingMessage(std::__1::unique_ptr<IPC::Decoder, std::__1::default_delete<IPC::Decoder> >)::$_14>::call() |
| | 108 | 63 0x62609018f WTF::Function<void ()>::operator()() const |
| | 109 | 64 0x6260e8f83 WTF::RunLoop::performWork() |
| | 110 | 65 0x6260e9934 WTF::RunLoop::performWork(void*) |
| | 111 | 66 0x7fff2e435a11 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ |
| | 112 | 67 0x7fff2e4ef42c __CFRunLoopDoSource0 |
| | 113 | 68 0x7fff2e418470 __CFRunLoopDoSources0 |
| | 114 | 69 0x7fff2e4178ed __CFRunLoopRun |
| | 115 | 70 0x7fff2e417153 CFRunLoopRunSpecific |
| | 116 | 71 0x7fff2d701d96 RunCurrentEventLoopInMode |
| | 117 | 72 0x7fff2d701b06 ReceiveNextEventCommon |
| | 118 | 73 0x7fff2d701884 _BlockUntilNextEventMatchingListInModeWithFilter |
| | 119 | 74 0x7fff2b9b2a73 _DPSNextEvent |
| | 120 | 75 0x7fff2c148e34 -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] |
| | 121 | 76 0x7fff2b9a7885 -[NSApplication run] |
| | 122 | 77 0x7fff2b976a72 NSApplicationMain |
| | 123 | 78 0x7fff56619d77 _xpc_objc_main |
| | 124 | 79 0x7fff566189ca xpc_main |
| | 125 | 80 0x1091cd077 WebKit::XPCServiceMain() |
| | 126 | 81 0x1091cd36b main |
| | 127 | 82 0x7fff562bf015 start |
| | 128 | 83 0x1 |
| | 129 | |
| | 130 | Backtrace for token 5651 |
| | 131 | 1 0x6179baa97 WebCore::Node::ref() |
| | 132 | 2 0x615d77d88 WTF::Ref<WebCore::Document, WTF::DumbPtrTraits<WebCore::Document> >::Ref(WebCore::Document&) |
| | 133 | 3 0x615d77d4d WTF::Ref<WebCore::Document, WTF::DumbPtrTraits<WebCore::Document> >::Ref(WebCore::Document&) |
| | 134 | 4 0x617396d29 WebCore::toJS(JSC::ExecState*, WebCore::JSDOMGlobalObject*, WebCore::Document&) |
| | 135 | 5 0x6173ad378 WebCore::createWrapperInline(JSC::ExecState*, WebCore::JSDOMGlobalObject*, WTF::Ref<WebCore::Node, WTF::DumbPtrTraits<WebCore::Node> >&&) |
| | 136 | 6 0x6173ad0a0 WebCore::createWrapper(JSC::ExecState*, WebCore::JSDOMGlobalObject*, WTF::Ref<WebCore::Node, WTF::DumbPtrTraits<WebCore::Node> >&&) |
| | 137 | 7 0x615c363de WebCore::toJS(JSC::ExecState*, WebCore::JSDOMGlobalObject*, WebCore::Node&) |
| | 138 | 8 0x615c8fbb0 WebCore::toJS(JSC::ExecState*, WebCore::JSDOMGlobalObject*, WebCore::Node*) |
| | 139 | 9 0x617384fd3 WebCore::JSDOMWindowBase::updateDocument() |
| | 140 | 10 0x6173d677e WebCore::ScriptController::initScriptForWindowProxy(WebCore::JSWindowProxy&) |
| | 141 | 11 0x617457455 WebCore::WindowProxy::createJSWindowProxyWithInitializedScript(WebCore::DOMWrapperWorld&) |
| | 142 | 12 0x6173c70d6 WebCore::WindowProxy::jsWindowProxy(WebCore::DOMWrapperWorld&) |
| | 143 | 13 0x6173d556b WebCore::ScriptController::jsWindowProxy(WebCore::DOMWrapperWorld&) |
| | 144 | 14 0x6173d5355 WebCore::ScriptController::evaluateInWorld(WebCore::ScriptSourceCode const&, WebCore::DOMWrapperWorld&, WebCore::ExceptionDetails*) |
| | 145 | 15 0x6173d57bd WebCore::ScriptController::evaluate(WebCore::ScriptSourceCode const&, WebCore::ExceptionDetails*) |
| | 146 | 16 0x617a04d37 WebCore::ScriptElement::executeClassicScript(WebCore::ScriptSourceCode const&) |
| | 147 | 17 0x617a03084 WebCore::ScriptElement::prepareScript(WTF::TextPosition const&, WebCore::ScriptElement::LegacyTypeSupport) |
| | 148 | 18 0x617e64798 WebCore::HTMLScriptRunner::runScript(WebCore::ScriptElement&, WTF::TextPosition const&) |
| | 149 | 19 0x617e645bf WebCore::HTMLScriptRunner::execute(WTF::Ref<WebCore::ScriptElement, WTF::DumbPtrTraits<WebCore::ScriptElement> >&&, WTF::TextPosition const&) |
| | 150 | 20 0x617e455a3 WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder() |
| | 151 | 21 0x617e45b63 WebCore::HTMLDocumentParser::pumpTokenizerLoop(WebCore::HTMLDocumentParser::SynchronousMode, bool, WebCore::PumpSession&) |
| | 152 | 22 0x617e44684 WebCore::HTMLDocumentParser::pumpTokenizer(WebCore::HTMLDocumentParser::SynchronousMode) |
| | 153 | 23 0x617e43f8f WebCore::HTMLDocumentParser::pumpTokenizerIfPossible(WebCore::HTMLDocumentParser::SynchronousMode) |
| | 154 | 24 0x617e46e9a WebCore::HTMLDocumentParser::append(WTF::RefPtr<WTF::StringImpl, WTF::DumbPtrTraits<WTF::StringImpl> >&&) |
| | 155 | 25 0x61785fe62 WebCore::DecodedDataDocumentParser::flush(WebCore::DocumentWriter&) |
| | 156 | 26 0x6180c55b4 WebCore::DocumentWriter::end() |
| | 157 | 27 0x618084a1f WebCore::DocumentLoader::finishedLoading() |
| | 158 | 28 0x6180847bf WebCore::DocumentLoader::notifyFinished(WebCore::CachedResource&) |
| | 159 | 29 0x6181c7fdf WebCore::CachedResource::checkNotify() |
| | 160 | 30 0x6181ba091 WebCore::CachedResource::finishLoading(WebCore::SharedBuffer*) |
| | 161 | 31 0x6181c4ec2 WebCore::CachedRawResource::finishLoading(WebCore::SharedBuffer*) |
| | 162 | 32 0x618155a58 WebCore::SubresourceLoader::didFinishLoading(WebCore::NetworkLoadMetrics const&) |
| | 163 | 33 0x610f6d50b WebKit::WebResourceLoader::didFinishResourceLoad(WebCore::NetworkLoadMetrics const&) |
| | 164 | 34 0x610f71b8a void IPC::callMemberFunctionImpl<WebKit::WebResourceLoader, void (WebKit::WebResourceLoader::*)(WebCore::NetworkLoadMetrics const&), std::__1::tuple<WebCore::NetworkLoadMetrics>, 0ul>(WebKit::WebResourceLoader*, void (WebKit::WebResourceLoader::*)(WebCore::NetworkLoadMetrics const&), std::__1::tuple<WebCore::NetworkLoadMetrics>&&, std::__1::integer_sequence<unsigned long, 0ul>) |
| | 165 | 35 0x610f71a10 void IPC::callMemberFunction<WebKit::WebResourceLoader, void (WebKit::WebResourceLoader::*)(WebCore::NetworkLoadMetrics const&), std::__1::tuple<WebCore::NetworkLoadMetrics>, std::__1::integer_sequence<unsigned long, 0ul> >(std::__1::tuple<WebCore::NetworkLoadMetrics>&&, WebKit::WebResourceLoader*, void (WebKit::WebResourceLoader::*)(WebCore::NetworkLoadMetrics const&)) |
| | 166 | 36 0x610f70bea void IPC::handleMessage<Messages::WebResourceLoader::DidFinishResourceLoad, WebKit::WebResourceLoader, void (WebKit::WebResourceLoader::*)(WebCore::NetworkLoadMetrics const&)>(IPC::Decoder&, WebKit::WebResourceLoader*, void (WebKit::WebResourceLoader::*)(WebCore::NetworkLoadMetrics const&)) |
| | 167 | 37 0x610f701fc WebKit::WebResourceLoader::didReceiveWebResourceLoaderMessage(IPC::Connection&, IPC::Decoder&) |
| | 168 | 38 0x6103c73a9 WebKit::NetworkProcessConnection::didReceiveMessage(IPC::Connection&, IPC::Decoder&) |
| | 169 | 39 0x610774e3c IPC::Connection::dispatchMessage(IPC::Decoder&) |
| | 170 | 40 0x6107679ad IPC::Connection::dispatchMessage(std::__1::unique_ptr<IPC::Decoder, std::__1::default_delete<IPC::Decoder> >) |
| | 171 | 41 0x6107759f7 IPC::Connection::dispatchOneIncomingMessage() |
| | 172 | 42 0x610793bc8 IPC::Connection::enqueueIncomingMessage(std::__1::unique_ptr<IPC::Decoder, std::__1::default_delete<IPC::Decoder> >)::$_14::operator()() |
| | 173 | 43 0x610793ad9 WTF::Function<void ()>::CallableWrapper<IPC::Connection::enqueueIncomingMessage(std::__1::unique_ptr<IPC::Decoder, std::__1::default_delete<IPC::Decoder> >)::$_14>::call() |
| | 174 | 44 0x62609018f WTF::Function<void ()>::operator()() const |
| | 175 | 45 0x6260e8f83 WTF::RunLoop::performWork() |
| | 176 | 46 0x6260e9934 WTF::RunLoop::performWork(void*) |
| | 177 | 47 0x7fff2e435a11 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ |
| | 178 | 48 0x7fff2e4ef42c __CFRunLoopDoSource0 |
| | 179 | 49 0x7fff2e418470 __CFRunLoopDoSources0 |
| | 180 | 50 0x7fff2e4178ed __CFRunLoopRun |
| | 181 | 51 0x7fff2e417153 CFRunLoopRunSpecific |
| | 182 | 52 0x7fff2d701d96 RunCurrentEventLoopInMode |
| | 183 | 53 0x7fff2d701b06 ReceiveNextEventCommon |
| | 184 | 54 0x7fff2d701884 _BlockUntilNextEventMatchingListInModeWithFilter |
| | 185 | 55 0x7fff2b9b2a73 _DPSNextEvent |
| | 186 | 56 0x7fff2c148e34 -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] |
| | 187 | 57 0x7fff2b9a7885 -[NSApplication run] |
| | 188 | 58 0x7fff2b976a72 NSApplicationMain |
| | 189 | 59 0x7fff56619d77 _xpc_objc_main |
| | 190 | 60 0x7fff566189ca xpc_main |
| | 191 | 61 0x1091cd077 WebKit::XPCServiceMain() |
| | 192 | 62 0x1091cd36b main |
| | 193 | 63 0x7fff562bf015 start |
| | 194 | 64 0x1 |
| | 195 | }}} |