<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>199808</bug_id>
          
          <creation_ts>2019-07-15 14:22:24 -0700</creation_ts>
          <short_desc>Crash under DisplayRefreshMonitorManager::displayWasUpdated()</short_desc>
          <delta_ts>2019-07-16 19:51:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>199847</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>pvollan</cc>
    
    <cc>rniwa</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1552968</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-07-15 14:22:24 -0700</bug_when>
    <thetext>50 WebCore: WebCore::DisplayRefreshMonitorManager::displayWasUpdated(unsigned int) &lt;==
        50 WebKit: IPC::Connection::dispatchMessage(std::__1::unique_ptr&lt;IPC::Decoder, std::__1::default_delete&lt;IPC::Decoder&gt; &gt;)
          50 WebKit: WTF::Detail::CallableWrapper&lt;IPC::Connection::enqueueIncomingMessage(std::__1::unique_ptr&lt;IPC::Decoder, std::__1::default_delete&lt;IPC::Decoder&gt; &gt;)::$_14, void&gt;::call()
            50 JavaScriptCore: WTF::RunLoop::performWork()
              50 JavaScriptCore: WTF::RunLoop::performWork(void*)
                50 CoreFoundation: __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
                  50 CoreFoundation: __CFRunLoopDoSource0
                    50 CoreFoundation: __CFRunLoopDoSources0
                      50 CoreFoundation: __CFRunLoopRun
                        50 CoreFoundation: CFRunLoopRunSpecific
                          50 Foundation: -[NSRunLoop(NSRunLoop) runMode:beforeDate:]
                            50 Foundation: -[NSRunLoop(NSRunLoop) run]
                              50 libxpc.dylib: _xpc_objc_main.cold.4
                                50 libxpc.dylib: _xpc_objc_main
                                  50 libxpc.dylib: xpc_main
                                    50 WebKit: WebKit::XPCServiceMain(int, char const**)
                                      50 libdyld.dylib: start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1552969</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-07-15 14:22:38 -0700</bug_when>
    <thetext>&lt;rdar://problem/53070144&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1552978</commentid>
    <comment_count>2</comment_count>
      <attachid>374151</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-07-15 14:31:24 -0700</bug_when>
    <thetext>Created attachment 374151
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1552982</commentid>
    <comment_count>3</comment_count>
      <attachid>374151</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-07-15 14:41:27 -0700</bug_when>
    <thetext>Comment on attachment 374151
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553012</commentid>
    <comment_count>4</comment_count>
      <attachid>374151</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-07-15 16:07:03 -0700</bug_when>
    <thetext>Comment on attachment 374151
Patch

Clearing flags on attachment: 374151

Committed r247459: &lt;https://trac.webkit.org/changeset/247459&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553013</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-07-15 16:07:05 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553407</commentid>
    <comment_count>6</comment_count>
      <attachid>374151</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-07-16 18:27:26 -0700</bug_when>
    <thetext>Comment on attachment 374151
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=374151&amp;action=review

&gt; Source/WebCore/platform/graphics/DisplayRefreshMonitorManager.cpp:134
&gt; -    for (const auto&amp; monitorWrapper : m_monitors) {
&gt; -        auto&amp; monitor = monitorWrapper.monitor;
&gt; +    Vector&lt;RefPtr&lt;DisplayRefreshMonitor&gt;&gt; monitors = WTF::map(m_monitors, [](auto&amp; monitorWrapper) {
&gt; +        return monitorWrapper.monitor;
&gt; +    });
&gt; +    for (auto&amp; monitor : monitors) {

Isn&apos;t PlatformDisplayID unique for every monitor? If so, why do we need to loop through all the monitors if we find one whose displayID matches the argument displayID? Can&apos;t we just break/return when we find the first one:

if (displayID == monitor-&gt;displayID()) {
    if (monitor-&gt;hasRequestedRefreshCallback())
        monitor-&gt;displayLinkFired();
    break;
}

DisplayRefreshMonitorManager::unregisterClient() has similar logic like the proposed one so it does not need to copy the monitors before looping through them.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374151</attachid>
            <date>2019-07-15 14:31:24 -0700</date>
            <delta_ts>2019-07-15 16:07:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-199808-20190715143122.patch</filename>
            <type>text/plain</type>
            <size>2036</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3NDQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjYwZDFjNDI3NTJmYTcy
ZTM3NmE2OTMwMjVjOWI4M2YzNGYxMGQzZi4uZjBhNDBiM2Y4MzYyMmVjMGY4MWY0ZmY2N2RiOTJi
NTkxZmVmNTkzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE5LTA3LTE1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQ3Jhc2ggdW5kZXIgRGlzcGxh
eVJlZnJlc2hNb25pdG9yTWFuYWdlcjo6ZGlzcGxheVdhc1VwZGF0ZWQoKQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5ODA4CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS81MzA3MDE0ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBDb3B5IG1fbW9uaXRvcnMgYmVmb3JlIGl0ZXJhdGluZyBvdmVyIGl0IGJl
Y2F1c2UgdGhlIGNhbGxpbmcgZGlzcGxheUxpbmtGaXJlZCgpIG9uIHRoZQorICAgICAgICBtb25p
dG9yIG1heSBlbmQgdXAgY2FsbGluZyBEaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyOjpkaXNw
bGF5RGlkUmVmcmVzaCgpIHN5bmNocm9ub3VzbHksCisgICAgICAgIHdoaWNoIHJlbW92ZXMgdGhl
IG1vbml0b3IgZnJvbSBtX21vbml0b3JzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
RGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyOjpkaXNwbGF5V2FzVXBkYXRlZCk6CisKIDIwMTktMDct
MTUgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBJ
bXByb3ZlIHdhc20gd3B0IHRlc3QgcmVzdWx0cyBieSBmaXhpbmcgbWlzY2VsbGFuZW91cyBpc3N1
ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlS
ZWZyZXNoTW9uaXRvck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5jcHAKaW5kZXggNGQzY2Q2OTU1ZDNhYjc5
NTk0MDlkMWNjZTFmYjlkYjU4Y2NjOThkNS4uNjk5Zjg1ZDExYTgyNmVjMTY3NDYyM2FlY2I3ZDI3
YTA2YTNkNGFlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5jcHAKQEAgLTEyOCw4
ICsxMjgsMTAgQEAgdm9pZCBEaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyOjp3aW5kb3dTY3Jl
ZW5EaWRDaGFuZ2UoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGwKIAogdm9pZCBEaXNwbGF5UmVmcmVz
aE1vbml0b3JNYW5hZ2VyOjpkaXNwbGF5V2FzVXBkYXRlZChQbGF0Zm9ybURpc3BsYXlJRCBkaXNw
bGF5SUQpCiB7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBtb25pdG9yV3JhcHBlciA6IG1fbW9uaXRv
cnMpIHsKLSAgICAgICAgYXV0byYgbW9uaXRvciA9IG1vbml0b3JXcmFwcGVyLm1vbml0b3I7Cisg
ICAgVmVjdG9yPFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+PiBtb25pdG9ycyA9IFdURjo6
bWFwKG1fbW9uaXRvcnMsIFtdKGF1dG8mIG1vbml0b3JXcmFwcGVyKSB7CisgICAgICAgIHJldHVy
biBtb25pdG9yV3JhcHBlci5tb25pdG9yOworICAgIH0pOworICAgIGZvciAoYXV0byYgbW9uaXRv
ciA6IG1vbml0b3JzKSB7CiAgICAgICAgIGlmIChkaXNwbGF5SUQgPT0gbW9uaXRvci0+ZGlzcGxh
eUlEKCkgJiYgbW9uaXRvci0+aGFzUmVxdWVzdGVkUmVmcmVzaENhbGxiYWNrKCkpCiAgICAgICAg
ICAgICBtb25pdG9yLT5kaXNwbGF5TGlua0ZpcmVkKCk7CiAgICAgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>