⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 282011 in webkit


Ignore:
Timestamp:
Sep 3, 2021, 12:11:25 PM (5 years ago)
Author:
Chris Dumez
Message:

Fix race in RemoteRenderingBackend::allowsExitUnderMemoryPressure()
​https://bugs.webkit.org/show_bug.cgi?id=229870
<rdar://82459484>

Reviewed by David Kilzer.

RemoteRenderingBackend::m_remoteResourceCache should only be used safely from RemoteRenderingBackend's work queue.
RemoteRenderingBackend::allowsExitUnderMemoryPressure() gets called on the main thread so we need to make sure we
dispatch to RemoteRenderingBackend's work queue before accessing m_remoteResourceCache.

  • GPUProcess/graphics/RemoteRenderingBackend.cpp:

(WebKit::RemoteRenderingBackend::allowsExitUnderMemoryPressure const):

Location:
trunk/Source/WebKit
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r282006 r282011  
     12021-09-03  Chris Dumez  <cdumez@apple.com>
     2
     3        Fix race in RemoteRenderingBackend::allowsExitUnderMemoryPressure()
     4        https://bugs.webkit.org/show_bug.cgi?id=229870
     5        <rdar://82459484>
     6
     7        Reviewed by David Kilzer.
     8
     9        RemoteRenderingBackend::m_remoteResourceCache should only be used safely from RemoteRenderingBackend's work queue.
     10        RemoteRenderingBackend::allowsExitUnderMemoryPressure() gets called on the main thread so we need to make sure we
     11        dispatch to RemoteRenderingBackend's work queue before accessing m_remoteResourceCache.
     12
     13        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
     14        (WebKit::RemoteRenderingBackend::allowsExitUnderMemoryPressure const):
     15
    1162021-09-03  Alex Christensen  <achristensen@webkit.org>
    217
  • trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp

    r280754 r282011  
    682682bool RemoteRenderingBackend::allowsExitUnderMemoryPressure() const
    683683{
    684     return m_remoteResourceCache.imageBuffers().isEmpty() && m_remoteResourceCache.nativeImages().isEmpty();
     684    ASSERT(isMainRunLoop());
     685    bool hasActiveDrawables = false;
     686    m_workQueue->dispatchSync([this, &hasActiveDrawables] {
     687        hasActiveDrawables = !m_remoteResourceCache.imageBuffers().isEmpty() || !m_remoteResourceCache.nativeImages().isEmpty();
     688    });
     689    return !hasActiveDrawables;
    685690}
    686691
Note: See TracChangeset for help on using the changeset viewer.