Bug 209977 - REGRESSION (r259383-259384): ASSERTION FAILED: 'Completion handler should always be called' seen with http/wpt/service-workers/service-worker-different-process.https.html
Summary: REGRESSION (r259383-259384): ASSERTION FAILED: 'Completion handler should alw...
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: New Bugs (show other bugs)
Version: WebKit Nightly Build
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: youenn fablet
URL:
Keywords: InRadar
Depends on:
Blocks:
 
Reported: 2020-04-03 11:07 PDT by Ryan Haddad
Modified: 2020-04-12 14:37 PDT (History)
6 users (show)

See Also:


Attachments
crash log (96.82 KB, text/plain)
2020-04-03 11:08 PDT, Ryan Haddad
no flags Details
Patch (1.75 KB, patch)
2020-04-07 04:34 PDT, youenn fablet
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Ryan Haddad 2020-04-03 11:07:46 PDT
The following is seen on iOS and macOS debug bots with http/wpt/service-workers/service-worker-different-process.https.html

ASSERTION FAILED: Completion handler should always be called
!m_function
/Volumes/Data/slave/catalina-debug/build/WebKitBuild/Debug/usr/local/include/wtf/CompletionHandler.h(53) : WTF::CompletionHandler<void (IPC::Decoder *)>::~CompletionHandler()
1   0x10b99ef29 WTFCrash
2   0x11281c037 WTF::CompletionHandler<void (IPC::Decoder*)>::~CompletionHandler()
3   0x1127fba95 WTF::CompletionHandler<void (IPC::Decoder*)>::~CompletionHandler()
4   0x112b35a45 std::__1::pair<WTF::CompletionHandler<void (IPC::Decoder*)>, unsigned long long>::~pair()
5   0x112b35a05 std::__1::pair<WTF::CompletionHandler<void (IPC::Decoder*)>, unsigned long long>::~pair()
6   0x112b359cf WTF::Optional_base<std::__1::pair<WTF::CompletionHandler<void (IPC::Decoder*)>, unsigned long long> >::~Optional_base()
7   0x112b35998 WTF::Optional<std::__1::pair<WTF::CompletionHandler<void (IPC::Decoder*)>, unsigned long long> >::~Optional()
8   0x112b35575 WTF::Optional<std::__1::pair<WTF::CompletionHandler<void (IPC::Decoder*)>, unsigned long long> >::~Optional()
9   0x113475746 WebKit::AuxiliaryProcessProxy::PendingMessage::~PendingMessage()
10  0x11346f2d5 WebKit::AuxiliaryProcessProxy::PendingMessage::~PendingMessage()
11  0x11347801f WTF::VectorDestructor<true, WebKit::AuxiliaryProcessProxy::PendingMessage>::destruct(WebKit::AuxiliaryProcessProxy::PendingMessage*, WebKit::AuxiliaryProcessProxy::PendingMessage*)
12  0x113477f7d WTF::VectorTypeOperations<WebKit::AuxiliaryProcessProxy::PendingMessage>::destruct(WebKit::AuxiliaryProcessProxy::PendingMessage*, WebKit::AuxiliaryProcessProxy::PendingMessage*)
13  0x113477f40 WTF::Vector<WebKit::AuxiliaryProcessProxy::PendingMessage, 0ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc>::~Vector()
14  0x11346e895 WTF::Vector<WebKit::AuxiliaryProcessProxy::PendingMessage, 0ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc>::~Vector()
15  0x11346e7c1 WebKit::AuxiliaryProcessProxy::~AuxiliaryProcessProxy()
16  0x1136b17c7 WebKit::WebProcessProxy::~WebProcessProxy()
17  0x1136b1c55 WebKit::WebProcessProxy::~WebProcessProxy()
18  0x1136b1cdc WebKit::WebProcessProxy::~WebProcessProxy()
19  0x1133026e4 WTF::ThreadSafeRefCounted<WebKit::WebProcessProxy, (WTF::DestructionThread)0>::deref() const::'lambda'()::operator()() const
20  0x11330267d WTF::ThreadSafeRefCounted<WebKit::WebProcessProxy, (WTF::DestructionThread)0>::deref() const
21  0x11330262e WebKit::WebProcessProxy::deref()
22  0x11356a58e void WTF::derefIfNotNull<WebKit::WebProcessProxy>(WebKit::WebProcessProxy*)
23  0x11356a559 WTF::RefPtr<WebKit::WebProcessProxy, WTF::DumbPtrTraits<WebKit::WebProcessProxy> >::~RefPtr()
24  0x1135316b5 WTF::RefPtr<WebKit::WebProcessProxy, WTF::DumbPtrTraits<WebKit::WebProcessProxy> >::~RefPtr()
25  0x1136a3fe1 WebKit::WebProcessPool::disconnectProcess(WebKit::WebProcessProxy*)
26  0x113698d0d WebKit::WebProcessProxy::shutDown()
27  0x1136b258c WebKit::WebProcessProxy::maybeShutDown()
28  0x1136a959c WebKit::WebProcessProxy::disableServiceWorkers()
29  0x11369fc63 WebKit::WebProcessPool::terminateServiceWorkers()
30  0x1136b00d7 WebKit::WebProcessPool::setUseSeparateServiceWorkerProcess(bool)
31  0x113848fce WKContextSetUseSeparateServiceWorkerProcess

https://results.webkit.org/?suite=layout-tests&test=http%2Fwpt%2Fservice-workers%2Fservice-worker-different-process.https.html
Comment 1 Ryan Haddad 2020-04-03 11:08:04 PDT
Created attachment 395396 [details]
crash log
Comment 2 Ryan Haddad 2020-04-03 11:09:01 PDT
rdar://61264668
Comment 3 youenn fablet 2020-04-07 04:34:06 PDT
Created attachment 395669 [details]
Patch
Comment 4 EWS 2020-04-07 09:09:48 PDT
Committed r259640: <https://trac.webkit.org/changeset/259640>

All reviewed patches have been landed. Closing bug and clearing flags on attachment 395669 [details].
Comment 5 Darin Adler 2020-04-12 14:37:51 PDT
Comment on attachment 395669 [details]
Patch

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

> Source/WebKit/UIProcess/AuxiliaryProcessProxy.cpp:52
> +    auto pendingMessages = WTFMove(m_pendingMessages);
> +    for (auto& pendingMessage : pendingMessages) {

You can write it like this:

   for (auto& message : std::exchange(m_pendingMessages, { }))

I think it’s better.