Changeset 93871 in webkit


Ignore:
Timestamp:
Aug 26, 2011, 6:15:00 AM (14 years ago)
Author:
gavinp@chromium.org
Message:

add a state enumeration to track down cause of null CachedScript execution
https://bugs.webkit.org/show_bug.cgi?id=66939

Reviewed by Alexey Proskuryakov.

Over in http://code.google.com/p/chromium/issues/detail?id=75604 I
have a bug I cannot reproduce. I added an earlier crash in
https://bugs.webkit.org/show_bug.cgi?id=65563 , and we've since
gotten many good stacks, all coming in through a failed request that
eventually calls notifyFinished() on a ScriptElement with a NULL
m_cachedScript.

I'd like to know how this got NULL. This enumeration should let
me find that in stack dumps from reproductions.

No new tests, as my goal here is to get telemetry on a bug that I cannot reproduce.

  • dom/ScriptElement.cpp:

(WebCore::ScriptElement::ScriptElement):
(WebCore::ScriptElement::requestScript):
(WebCore::ScriptElement::stopLoadRequest):
(WebCore::ScriptElement::notifyFinished):

  • dom/ScriptElement.h:
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r93870 r93871  
     12011-08-26  Gavin Peters  <gavinp@chromium.org>
     2
     3        add a state enumeration to track down cause of null CachedScript execution
     4        https://bugs.webkit.org/show_bug.cgi?id=66939
     5
     6        Reviewed by Alexey Proskuryakov.
     7
     8        Over in http://code.google.com/p/chromium/issues/detail?id=75604 I
     9        have a bug I cannot reproduce.  I added an earlier crash in
     10        https://bugs.webkit.org/show_bug.cgi?id=65563 , and we've since
     11        gotten many good stacks, all coming in through a failed request that
     12        eventually calls notifyFinished() on a ScriptElement with a NULL
     13        m_cachedScript.
     14
     15        I'd like to know how this got NULL.  This enumeration should let
     16        me find that in stack dumps from reproductions.
     17
     18        No new tests, as my goal here is to get telemetry on a bug that I cannot reproduce.
     19
     20        * dom/ScriptElement.cpp:
     21        (WebCore::ScriptElement::ScriptElement):
     22        (WebCore::ScriptElement::requestScript):
     23        (WebCore::ScriptElement::stopLoadRequest):
     24        (WebCore::ScriptElement::notifyFinished):
     25        * dom/ScriptElement.h:
     26
    1272011-08-26  Mike Reed  <reed@google.com>
    228
  • trunk/Source/WebCore/dom/ScriptElement.cpp

    r91382 r93871  
    6565    , m_forceAsync(!parserInserted)
    6666    , m_willExecuteInOrder(false)
     67    , m_cachedScriptState(NeverSet)
    6768{
    6869    ASSERT(m_element);
     
    259260    m_isExternalScript = true;
    260261
    261     if (m_cachedScript)
     262    if (m_cachedScript) {
     263        ASSERT(m_cachedScriptState == NeverSet);
     264        m_cachedScriptState = Set;
    262265        return true;
     266    }
    263267
    264268    dispatchErrorEvent();
     
    296300        if (!m_willBeParserExecuted)
    297301            m_cachedScript->removeClient(this);
     302        ASSERT(m_cachedScriptState == Set);
     303        m_cachedScriptState = ZeroedInStopLoadRequest;
    298304        m_cachedScript = 0;
    299305    }
     
    321327    else
    322328        m_element->document()->scriptRunner()->queueScriptForExecution(this, m_cachedScript, ScriptRunner::ASYNC_EXECUTION);
     329
     330    ASSERT(m_cachedScriptState == Set);
     331    m_cachedScriptState = ZeroedInNotifyFinished;
    323332    m_cachedScript = 0;
    324333}
  • trunk/Source/WebCore/dom/ScriptElement.h

    r84357 r93871  
    105105    String m_characterEncoding;
    106106    String m_fallbackCharacterEncoding;
     107   
     108    // Temporary: intended to help debug how we get notifyFinished() called when m_cachedScript is null,
     109    // which seems to sometimes happen (see http://code.google.com/p/chromium/issues/detail?id=75604 )
     110    enum {
     111      NeverSet,
     112      Set,
     113      ZeroedInStopLoadRequest,
     114      ZeroedInNotifyFinished,
     115    } m_cachedScriptState;
    107116};
    108117
Note: See TracChangeset for help on using the changeset viewer.