yeatse / NSURLProtocol-WebKitSupport

Make your WKWebView happy with NSURLProtocol
MIT License
662 stars 126 forks source link

WebKit::ChildProcessProxy::sendMessage crash 崩溃 #14

Open yuchuanfeng opened 5 years ago

yuchuanfeng commented 5 years ago

crash堆栈日志如下:

0 WebKit 0x00000001ea9a9230 WebKit::ChildProcessProxy::sendMessage(std::__1::unique_ptr<IPC::Encoder, std::__1::default_delete >, WTF::OptionSet) + 24
1 WebKit 0x00000001eaaee84c bool WebKit::ChildProcessProxy::send(Messages::LegacyCustomProtocolManager::DidFailWithError&&, unsigned long long, WTF::OptionSet) + 128
2 WebKit 0x00000001eaaee7c0 WebKit::LegacyCustomProtocolManagerProxy::didFailWithError(unsigned long long, WebCore::ResourceError const&) + 40
3 WebKit 0x00000001ea84c290 -[WKCustomProtocolLoader connection:didFailWithError:] + 72
4 CFNetwork 0x00000001db7ded04 ___65-[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:]_block_invoke + 68
5 CFNetwork 0x00000001db566760 -[NSURLConnectionInternalConnection invokeForDelegate:] + 164
6 CFNetwork 0x00000001db55db44 -[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:] + 212
7 CFNetwork 0x00000001db56281c -[NSURLConnectionInternal _withConnectionAndDelegate:] + 60
8 CFNetwork 0x00000001db79d590 _NSURLConnectionDidFail(_CFURLConnection, __CFError, void const*) + 96
9 CFNetwork 0x00000001db6e7a3c __ZN27URLConnectionClient_Classic17_delegate_didFailEP9CFErrorU13block_pointerFvvE_block_invoke + 124
10 CFNetwork 0x00000001db6e528c ____ZN27URLConnectionClient_Classic18_withDelegateAsyncEPKcU13block_pointerFvP16_CFURLConnectionPK33CFURLConnectionClientCurrent_VMaxE_block_invoke_2 + 128
11 libdispatch.dylib 0x00000001da9c1884 __dispatch_client_callout + 20
12 libdispatch.dylib 0x00000001da9c4e5c __dispatch_block_invoke_direct + 252
13 CFNetwork 0x00000001db7bc5ec RunloopBlockContext::_invoke_block(void const, void) + 44
14 CoreFoundation 0x00000001daee1750 _CFArrayApplyFunction + 84
15 CFNetwork 0x00000001db7bc4b0 RunloopBlockContext::perform() + 132
16 CFNetwork 0x00000001db7bd96c MultiplexerSource::perform() + 376
17 CFNetwork 0x00000001db7bd618 MultiplexerSource::_perform(void*) + 64
18 CoreFoundation 0x00000001daf42444 _CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 28
19 CoreFoundation 0x00000001daf423c0 ___CFRunLoopDoSource0 + 92
20 CoreFoundation 0x00000001daf41ccc ___CFRunLoopDoSources0 + 260
21 CoreFoundation 0x00000001daf3c950 ___CFRunLoopRun + 988
22 CoreFoundation 0x00000001daf3c254 _CFRunLoopRunSpecific + 452
23 GraphicsServices 0x00000001dd17bd8c _GSEventRunModal + 108
24 UIKitCore 0x00000002082844c0 _UIApplicationMain + 216
25 WKMainProject 0x0000000104913284 main (main.m:14)
26 libdyld.dylib 0x00000001da9f8fd8 _start + 4

我们项目中也使用wk_registerScheme注册 scheme,且注册有多个,有谁遇到过吗?

yeatse commented 5 years ago

看下是不是这个原因 https://github.com/Yeatse/NSURLProtocol-WebKitSupport/issues/2

yuchuanfeng commented 5 years ago

恩,那个回答我之前也看过,把WKWebView 所使用的 WKProcessPool 设置成单例变量还是会有这个 crash,应该是其它原因吧

Elliotsomething commented 5 years ago

确实最终都是挂在进程通信sendMessages,之前苹果在上层修过一个bug√=https://trac.webkit.org/changeset/244246/webkit, 但是还是存在crash,有老哥知道怎么复现吗

wangjunhua1 commented 5 years ago

我也遇到的相同的crash 有解决方案吗

yuchuanfeng commented 5 years ago

@wangjunhua1 你能复现这个 crash 吗?