Changeset 248297 in webkit


Ignore:
Timestamp:
Aug 6, 2019 9:18:05 AM (5 years ago)
Author:
Antti Koivisto
Message:

Add release assert against InvalidationRuleSet mutation during invalidation
https://bugs.webkit.org/show_bug.cgi?id=200467

Reviewed by Chris Dumez.

Try to get a more informative stack for rdar://problem/53413013

  • css/DocumentRuleSets.cpp:

(WebCore::DocumentRuleSets::~DocumentRuleSets):
(WebCore::DocumentRuleSets::collectFeatures const):

  • css/DocumentRuleSets.h:
  • style/AttributeChangeInvalidation.cpp:

(WebCore::Style::AttributeChangeInvalidation::invalidateStyleWithRuleSets):

  • style/ClassChangeInvalidation.cpp:

(WebCore::Style::ClassChangeInvalidation::invalidateStyleWithRuleSets):

Location:
trunk/Source/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r248295 r248297  
     12019-08-06  Antti Koivisto  <antti@apple.com>
     2
     3        Add release assert against InvalidationRuleSet mutation during invalidation
     4        https://bugs.webkit.org/show_bug.cgi?id=200467
     5
     6        Reviewed by Chris Dumez.
     7
     8        Try to get a more informative stack for rdar://problem/53413013
     9
     10        * css/DocumentRuleSets.cpp:
     11        (WebCore::DocumentRuleSets::~DocumentRuleSets):
     12        (WebCore::DocumentRuleSets::collectFeatures const):
     13        * css/DocumentRuleSets.h:
     14        * style/AttributeChangeInvalidation.cpp:
     15        (WebCore::Style::AttributeChangeInvalidation::invalidateStyleWithRuleSets):
     16        * style/ClassChangeInvalidation.cpp:
     17        (WebCore::Style::ClassChangeInvalidation::invalidateStyleWithRuleSets):
     18
    1192019-08-06  Antti Koivisto  <antti@apple.com>
    220
  • trunk/Source/WebCore/css/DocumentRuleSets.cpp

    r246490 r248297  
    3838namespace WebCore {
    3939
     40// For catching <rdar://problem/53413013>
     41bool DocumentRuleSets::s_isInvalidatingStyleWithRuleSets { false };
     42
    4043DocumentRuleSets::DocumentRuleSets(StyleResolver& styleResolver)
    4144    : m_styleResolver(styleResolver)
     
    4548}
    4649
    47 DocumentRuleSets::~DocumentRuleSets() = default;
     50DocumentRuleSets::~DocumentRuleSets()
     51{
     52    RELEASE_ASSERT(!s_isInvalidatingStyleWithRuleSets);
     53}
    4854
    4955RuleSet* DocumentRuleSets::userAgentMediaQueryStyle() const
     
    149155void DocumentRuleSets::collectFeatures() const
    150156{
     157    RELEASE_ASSERT(!s_isInvalidatingStyleWithRuleSets);
     158
    151159    m_features.clear();
    152160    // Collect all ids and rules using sibling selectors (:first-child and similar)
  • trunk/Source/WebCore/css/DocumentRuleSets.h

    r246490 r248297  
    7777    RuleFeatureSet& mutableFeatures();
    7878
     79    static bool s_isInvalidatingStyleWithRuleSets;
     80
    7981private:
    8082    void collectFeatures() const;
  • trunk/Source/WebCore/style/AttributeChangeInvalidation.cpp

    r246490 r248297  
    3030#include "StyleInvalidationFunctions.h"
    3131#include "StyleInvalidator.h"
     32#include <wtf/SetForScope.h>
    3233
    3334namespace WebCore {
     
    8990void AttributeChangeInvalidation::invalidateStyleWithRuleSets()
    9091{
     92    SetForScope<bool> isInvalidating(DocumentRuleSets::s_isInvalidatingStyleWithRuleSets, true);
     93
    9194    for (auto* invalidationRuleSet : m_invalidationRuleSets) {
    9295        Invalidator invalidator(*invalidationRuleSet->ruleSet);
  • trunk/Source/WebCore/style/ClassChangeInvalidation.cpp

    r246490 r248297  
    3232#include "StyleInvalidator.h"
    3333#include <wtf/BitVector.h>
     34#include <wtf/SetForScope.h>
    3435
    3536namespace WebCore {
     
    120121void ClassChangeInvalidation::invalidateStyleWithRuleSets()
    121122{
     123    SetForScope<bool> isInvalidating(DocumentRuleSets::s_isInvalidatingStyleWithRuleSets, true);
     124
    122125    for (auto* invalidationRuleSet : m_invalidationRuleSets) {
    123126        Invalidator invalidator(*invalidationRuleSet->ruleSet);
Note: See TracChangeset for help on using the changeset viewer.