Bug 218807

Summary: REGRESSION (r269657): ASSERTION FAILED: Completion handler should always be called under WebKit::GPUProcessProxy::~GPUProcessProxy
Product: WebKit Reporter: Ryan Haddad <ryanhaddad>
Component: WebKit2Assignee: Chris Dumez <cdumez>
Status: RESOLVED FIXED    
Severity: Normal CC: cdumez, darin, eric.carlson, ggaren, jer.noble, sam, thorton, webkit-bot-watchers-bugzilla, webkit-bug-importer
Priority: P2 Keywords: InRadar
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   
See Also: https://bugs.webkit.org/show_bug.cgi?id=218769
Attachments:
Description Flags
Patch
ews-feeder: commit-queue-
Patch none

Description Ryan Haddad 2020-11-11 09:15:40 PST
Seeing the following assertion failure on iOS Debug bots with various layout tests, as well as TestWebKitAPI.GPUProcess.RelaunchOnCrash

ASSERTION FAILED: Completion handler should always be called
!m_function
/Volumes/Data/slave/ios-simulator-14-debug/build/WebKitBuild/Debug-iphonesimulator/usr/local/include/wtf/CompletionHandler.h(58) : WTF::CompletionHandler<void ()>::~CompletionHandler()
1   0x10765e3e9 WTFCrash
2   0x10f18a627 WTF::CompletionHandler<void ()>::~CompletionHandler()
3   0x10f187bd5 WTF::CompletionHandler<void ()>::~CompletionHandler()
4   0x10fff553f WebKit::ProcessThrottler::sendPrepareToSuspendIPC(WebKit::IsSuspensionImminent)
5   0x10fff41d9 WebKit::ProcessThrottler::updateAssertionIfNeeded()
6   0x10fff4332 WebKit::ProcessThrottler::removeActivity(WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1>&)
7   0x10fe3f7e8 WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1>::invalidate()
8   0x10fe3f652 WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1>::~Activity()
9   0x10fe3f5f5 WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1>::~Activity()
10  0x10fe3f5ab std::__1::default_delete<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1> >::operator()(WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1>*) const
11  0x10fe3f52f std::__1::unique_ptr<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1>, std::__1::default_delete<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1> > >::reset(WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1>*)
12  0x10fe3f4c9 std::__1::unique_ptr<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1>, std::__1::default_delete<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1> > >::~unique_ptr()
13  0x10fe3f4a5 std::__1::unique_ptr<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1>, std::__1::default_delete<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1> > >::~unique_ptr()
14  0x10fe3f485 WTF::UniqueRef<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1> >::~UniqueRef()
15  0x10fe3f465 WTF::UniqueRef<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1> >::~UniqueRef()
16  0x10fe3f42d WTF::__storage_wrapper<WTF::UniqueRef<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1> > >::__destroy()
17  0x10fe3f405 WTF::__variant_storage<WTF::UniqueRef<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1> >, false>::__destroy(WTF::__storage_wrapper<WTF::UniqueRef<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1> > >&)
18  0x10fe3f3dc WTF::__variant_data<WTF::UniqueRef<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1> > >::__destroy(WTF::in_place_tag (&)(WTF::__in_place_private::__value_holder<0ul>&))
19  0x10fe3f3b3 void WTF::__variant_data<WTF::UniqueRef<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)0> >, WTF::UniqueRef<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1> > >::__destroy<1ul>(WTF::in_place_tag (&)(WTF::__in_place_private::__value_holder<1ul>&))
20  0x10fe3f383 void WTF::__variant_data<std::nullptr_t, WTF::UniqueRef<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)0> >, WTF::UniqueRef<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1> > >::__destroy<2ul>(WTF::in_place_tag (&)(WTF::__in_place_private::__value_holder<2ul>&))
21  0x10fe3f09d void WTF::__destroy_op_table<WTF::Variant<std::nullptr_t, WTF::UniqueRef<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)0> >, WTF::UniqueRef<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1> > >, WTF::__index_sequence<0l, 1l, 2l> >::__destroy_func<2l>(WTF::Variant<std::nullptr_t, WTF::UniqueRef<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)0> >, WTF::UniqueRef<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1> > >*)
22  0x10fe3ef95 WTF::Variant<std::nullptr_t, WTF::UniqueRef<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)0> >, WTF::UniqueRef<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1> > >::__destroy_self()
23  0x10fe3ef08 WTF::__variant_base<WTF::Variant<std::nullptr_t, WTF::UniqueRef<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)0> >, WTF::UniqueRef<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1> > >, false>::~__variant_base()
24  0x10fe3f878 WTF::Variant<std::nullptr_t, WTF::UniqueRef<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)0> >, WTF::UniqueRef<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1> > >::~Variant()
25  0x10fe340f5 WTF::Variant<std::nullptr_t, WTF::UniqueRef<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)0> >, WTF::UniqueRef<WebKit::ProcessThrottler::Activity<(WebKit::ProcessThrottler::ActivityType)1> > >::~Variant()
26  0x1104431c5 WebKit::GPUProcessProxy::~GPUProcessProxy()
27  0x110443295 WebKit::GPUProcessProxy::~GPUProcessProxy()
28  0x110255b1b std::__1::default_delete<WebKit::GPUProcessProxy>::operator()(WebKit::GPUProcessProxy*) const
29  0x110255ae2 WTF::RefCounted<WebKit::GPUProcessProxy, std::__1::default_delete<WebKit::GPUProcessProxy> >::deref() const
30  0x110255a67 WTF::DefaultRefDerefTraits<WebKit::GPUProcessProxy>::derefIfNotNull(WebKit::GPUProcessProxy*)
31  0x110255a29 WTF::RefPtr<WebKit::GPUProcessProxy, WTF::RawPtrTraits<WebKit::GPUProcessProxy>, WTF::DefaultRefDerefTraits<WebKit::GPUProcessProxy> >::~RefPtr()


https://build.webkit.org/results/Apple-iOS-14-Simulator-Debug-WK2-Tests/r269657%20(619)/results.html

https://build.webkit.org/builders/Apple-iOS-14-Simulator-Debug-WK2-Tests/builds/628/steps/run-api-tests/logs/stdio
Comment 1 Chris Dumez 2020-11-11 09:16:32 PST
Will investigate now, thanks.
Comment 2 Radar WebKit Bug Importer 2020-11-11 09:17:06 PST
<rdar://problem/71285627>
Comment 3 Chris Dumez 2020-11-11 09:18:58 PST
In GPUProcessProxy:

    // ProcessThrottlerClient
    void sendPrepareToSuspend(IsSuspensionImminent, CompletionHandler<void()>&&) final { }

The dummy implementation fails to call the CompletionHandler..
Comment 4 Chris Dumez 2020-11-11 09:19:58 PST
Will have a fix shortly.
Comment 5 Chris Dumez 2020-11-11 09:26:45 PST
Created attachment 413828 [details]
Patch
Comment 6 Chris Dumez 2020-11-11 09:34:13 PST
Created attachment 413830 [details]
Patch
Comment 7 Geoffrey Garen 2020-11-11 09:46:01 PST
Comment on attachment 413830 [details]
Patch

r=me
Comment 8 EWS 2020-11-11 10:44:11 PST
Committed r269690: <https://trac.webkit.org/changeset/269690>

All reviewed patches have been landed. Closing bug and clearing flags on attachment 413830 [details].