Thread-local `Connection::MessageDispatchScope` for `MESSAGE_CHECK` from work queues
Component: WebKit IPC | c0fbc10
WebKit process들은 IPC로 서로 통신합니다. WebContent process는 신뢰할 수 없기 때문에, MESSAGE_CHECK macro가 dispatch 시점에 수신 메시지의 내용을 검증합니다. 이전에는 "이 메시지가 유효하지 않다"는 flag가 Connection 객체에 저장되어 있었습니다. 또한 이 flag는 client run loop의 dispatchMessage()에서만 확인되었습니다. 문제는 하나의 connection이 다른 thread의 work-queue receiver로도 동시에 dispatch를 수행한다는 점입니다. 게다가 synchronous IPC에서는 dispatch가 중첩될 수도 있습니다. 이 commit은 connection 단위로 관리되던 상태를 제거하고, stack에 할당되는 thread-local Connection::MessageDispatchScope로 대체했습니다.
Significance
dispatch 단위의 유효성을 thread-local stack으로 추적하게 되면서, MESSAGE_CHECK 실패를 client run loop뿐 아니라 work-queue receiver(GPU/Network receive queue)에서도 보고할 수 있게 되었습니다. Connection 전체에 걸친 상태로는 동시에 실행되거나 중첩된 dispatch를 서로 구분할 수 없었습니다. 반면 scope 객체를 사용하면 각 dispatch를 명확히 구분할 수 있습니다.