Changeset 252466 in webkit


Ignore:
Timestamp:
Nov 14, 2019 2:18:15 PM (4 years ago)
Author:
Chris Dumez
Message:

[iOS] Crash under WebProcess::processTaskStateDidChange(WebKit::ProcessTaskStateObserver::TaskState)
https://bugs.webkit.org/show_bug.cgi?id=204177

Reviewed by Jer Noble.

Delay creating the ProcessTaskStateObserver until the WebProcess's connection to its parent had been
initialized. This is necessary because ProcessTaskStateObserver may call WebProcess::processTaskStateDidChange()
on a background thread, which will deference the IPC connection.

  • WebProcess/WebProcess.cpp:

(WebKit::m_webSQLiteDatabaseTracker):
(WebKit::WebProcess::~WebProcess):
(WebKit::WebProcess::initializeConnection):
(WebKit::m_taskStateObserver): Deleted.

  • WebProcess/WebProcess.h:
Location:
trunk/Source/WebKit
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r252459 r252466  
     12019-11-14  Chris Dumez  <cdumez@apple.com>
     2
     3        [iOS] Crash under WebProcess::processTaskStateDidChange(WebKit::ProcessTaskStateObserver::TaskState)
     4        https://bugs.webkit.org/show_bug.cgi?id=204177
     5
     6        Reviewed by Jer Noble.
     7
     8        Delay creating the ProcessTaskStateObserver until the WebProcess's connection to its parent had been
     9        initialized. This is necessary because ProcessTaskStateObserver may call WebProcess::processTaskStateDidChange()
     10        on a background thread, which will deference the IPC connection.
     11
     12        * WebProcess/WebProcess.cpp:
     13        (WebKit::m_webSQLiteDatabaseTracker):
     14        (WebKit::WebProcess::~WebProcess):
     15        (WebKit::WebProcess::initializeConnection):
     16        (WebKit::m_taskStateObserver): Deleted.
     17        * WebProcess/WebProcess.h:
     18
    1192019-11-14  Brady Eidson  <beidson@apple.com>
    220
  • trunk/Source/WebKit/WebProcess/WebProcess.cpp

    r252014 r252466  
    195195#if PLATFORM(IOS_FAMILY)
    196196    , m_webSQLiteDatabaseTracker([this](bool isHoldingLockedFiles) { parentProcessConnection()->send(Messages::WebProcessProxy::SetIsHoldingLockedFiles(isHoldingLockedFiles), 0); })
    197     , m_taskStateObserver(ProcessTaskStateObserver::create(*this))
    198197#endif
    199198{
     
    223222WebProcess::~WebProcess()
    224223{
    225 #if PLATFORM(IOS_FAMILY)
    226     m_taskStateObserver->invalidate();
    227 #endif
     224    ASSERT_NOT_REACHED();
    228225}
    229226
     
    268265
    269266    m_webConnection = WebConnectionToUIProcess::create(this);
     267
     268#if PLATFORM(IOS_FAMILY)
     269    // Make sure we have an IPC::Connection before creating the ProcessTaskStateObserver since it may call
     270    // WebProcess::processTaskStateDidChange() on a background thread and deference the IPC connection.
     271    m_taskStateObserver = ProcessTaskStateObserver::create(*this);
     272#endif
    270273}
    271274
  • trunk/Source/WebKit/WebProcess/WebProcess.h

    r252014 r252466  
    543543#if PLATFORM(IOS_FAMILY)
    544544    WebSQLiteDatabaseTracker m_webSQLiteDatabaseTracker;
    545     Ref<ProcessTaskStateObserver> m_taskStateObserver;
     545    RefPtr<ProcessTaskStateObserver> m_taskStateObserver;
    546546    Lock m_processWasResumedUIAssertionLock;
    547547    RetainPtr<BKSProcessAssertion> m_processWasResumedUIAssertion;
Note: See TracChangeset for help on using the changeset viewer.