| Summary: | With DOM Rendering in GPUP enabled, tests sometimes assert in GPUConnectionToWebProcess::didReceiveMessage() | ||
|---|---|---|---|
| Product: | WebKit | Reporter: | Simon Fraser (smfr) <simon.fraser> |
| Component: | WebKit Process Model | Assignee: | Nobody <webkit-unassigned> |
| Status: | RESOLVED CONFIGURATION CHANGED | ||
| Severity: | Normal | CC: | kkinnunen, simon.fraser, webkit-bug-importer, wenson_hsieh |
| Priority: | P2 | Keywords: | InRadar |
| Version: | Safari Technology Preview | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| See Also: | https://bugs.webkit.org/show_bug.cgi?id=237674 | ||
|
Description
Simon Fraser (smfr)
2022-03-25 14:12:38 PDT
Logging says: 14:08:21.496 71433 worker/0 fast/css/computed-image-width-with-percent-height-expected.html crashed, (stderr lines): 14:08:21.496 71433 StreamServerConnection::dispatchOutOfStreamMessage - no receiver for destination 8 14:08:21.496 71433 RemoteRenderingBackendProxy 0x7fba92a06c50 createRemoteImageBuffer 2854 14:08:21.496 71433 RemoteRenderingBackend 0x1540840c0 createImageBufferWithQualifiedIdentifier 2854 14:08:21.496 71433 RemoteDisplayListRecorder 0x154048950 RemoteDisplayListRecorder - RemoteRenderingBackend 0x1540840c0 14:08:21.496 71433 RemoteDisplayListRecorder 0x154048950 startListeningForIPC destination 2854 14:08:21.496 71433 StreamServerConnectionBase::startReceivingMessagesImpl destination 2854 14:08:21.496 71433 main thread: addMessageReceiveQueue destination 2854 14:08:21.496 71433 MessageReceiveQueueMap 0x15403c3d0 addImpl receiver RemoteDisplayListRecorder destination 2854 14:08:21.496 71433 done destination 2854 14:08:21.496 71433 create RemoteImageBuffer 0x15409c100 2854 14:08:21.496 71433 StreamServerConnection 0x154020220 processSetStreamDestinationID - current 8, new 2854 14:08:21.496 71433 StreamServerConnection 0x154020220 processSetStreamDestinationID - current 2854, new 8 14:08:21.496 71433 StreamServerConnection::dispatchOutOfStreamMessage - no receiver for destination 8 14:08:21.496 71433 StreamServerConnection::dispatchOutOfStreamMessage - no receiver for destination 8 14:08:21.496 71433 StreamServerConnection::dispatchOutOfStreamMessage - no receiver for destination 8 14:08:21.496 71433 StreamServerConnection 0x154020220 processSetStreamDestinationID - current 8, new 2851 14:08:21.496 71433 StreamServerConnection 0x154020220 processSetStreamDestinationID - current 2851, new 8 14:08:21.496 71433 StreamServerConnection 0x154020220 processSetStreamDestinationID - current 8, new 2854 14:08:21.496 71433 StreamServerConnection 0x154020220 processSetStreamDestinationID - current 2854, new 8 14:08:21.496 71433 destroy RemoteImageBuffer 0x15409c100 2854 14:08:21.496 71433 StreamServerConnection::dispatchOutOfStreamMessage - no receiver for destination 8 14:08:21.496 71433 MessageReceiveQueueMap 0x15403c3d0 remove receiver RemoteDisplayListRecorder destination 2854 14:08:21.496 71433 RemoteRenderingBackendProxy 0x7fba92a06c50 createRemoteImageBuffer 2860 14:08:21.496 71433 RemoteRenderingBackend 0x1540840c0 createImageBufferWithQualifiedIdentifier 2860 14:08:21.496 71433 RemoteDisplayListRecorder 0x154048a90 RemoteDisplayListRecorder - RemoteRenderingBackend 0x1540840c0 14:08:21.496 71433 RemoteDisplayListRecorder 0x154048a90 startListeningForIPC destination 2860 14:08:21.497 71433 StreamServerConnectionBase::startReceivingMessagesImpl destination 2860 14:08:21.497 71433 main thread: addMessageReceiveQueue destination 2860 14:08:21.497 71433 MessageReceiveQueueMap 0x15403c3d0 addImpl receiver RemoteDisplayListRecorder destination 2860 14:08:21.497 71433 done destination 2860 14:08:21.497 71433 create RemoteImageBuffer 0x15409c180 2860 14:08:21.497 71433 StreamServerConnection 0x154020220 processSetStreamDestinationID - current 8, new 2860 14:08:21.497 71433 StreamServerConnection 0x154020220 processSetStreamDestinationID - current 2860, new 2851 14:08:21.497 71433 StreamServerConnection 0x154020220 processSetStreamDestinationID - current 2851, new 8 14:08:21.497 71433 destroy RemoteImageBuffer 0x15409c980 2851 14:08:21.497 71433 MessageReceiveQueueMap 0x15403c3d0 remove receiver RemoteDisplayListRecorder destination 2851 14:08:21.497 71433 StreamServerConnection::dispatchOutOfStreamMessage - no receiver for destination 8 14:08:21.497 71433 RemoteRenderingBackendProxy 0x7fba92a06c50 createRemoteImageBuffer 2867 14:08:21.497 71433 RemoteRenderingBackend 0x1540840c0 createImageBufferWithQualifiedIdentifier 2867 14:08:21.497 71433 StreamClientConnection::send - failed to send inline message to stream 14:08:21.497 71433 SyncMessageState::processIncomingMessage: RemoteDisplayListRecorder message will be dispatched to the main thread 14:08:21.497 71433 Unhandled message RemoteDisplayListRecorder_DrawGlyphs to 2867 14:08:21.497 71433 SHOULD NEVER BE REACHED So: 1. StreamClientConnection fails to send an "createRemoteImageBuffer" inline message in-stream, and falls back to out-of-stream 2. This message gets handled in SyncMessageState::processIncomingMessage(), so we bounce it to the main thread 3. We then receive a in-stream message that tries to target this image buffer, but its IPC receiver hasn't been registered yet. This is with the fix for bug 237674. MessageReceiveQueueMap::get() has special code for the pair<receiverName, 0> so that patch may have changed behavior. The patch in bug 237674 ensured that we never use a std::pair<receiverName, 0> because you can only have one per IPC::Connection, and we need these per RemoteRenderingBackend. So I'm not sure if it's valid for MessageReceiveQueueMap::get() to use the destinationID of 0 when looking for entries in the queues. you're seeing this problem because you removed the very thing that "fixed" this. It wasn't at all clear that zero was a magic number. |