[roll] Roll fuchsia [display][api-protocols] Add a mutex to DisplayEngineEventsFidl.
Display engine drivers may use the DisplayEngineEventsFidl class in
multiple dispatchers. For example, in the amlogic-display driver:
* The Vsync interrupt dispatcher handles Vsync interrupts and triggers
the callback, which calls `DisplayEngineEventsFidl::OnDisplayVsync`
that issues a FIDL call to the listener.
* The main driver dispatcher handles incoming FIDL Engine calls from
the display coordinator. When the coordinator connects or disconnects
to the display engine driver, DisplayEngineFidlAdapter calls
`DisplayEngineEventsFidl::SetListener` to set (or unset) the listener
FIDL client.
`DisplayEngineEventsFidl` is not thread-safe and the clients must
synchronize externally. However, there were some unsynchronized usages
of `DisplayEngineEventsFidl` in `DisplayEngineFidlAdapter` and display
engine drivers, causing races and crashes.
This change introduces a workaround by adding a mutex to
`DisplayEngineEventsFidl` to guarantee synchronized access. This
suppresses the races between `DisplayEngineFidlAdapter` and display
engine drivers. We'll revise the threading model of the api-protocol
types and remove this workaround in future changes.
Test: core.vim3, rebooted 100 times and didn't see any amlogic-display
crash.
Original-Bug: 436460567
Original-Bug: 472347498
Original-Bug: 473698115
Original-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/1462709
Original-Revision: ab01124234fc0dce9d8350a2b50d4de02b1837f3
GitOrigin-RevId: 1c6c0421edbf90517de4a8b8edfaff20a1297a98
Change-Id: Ifa38659431323cde9d3bb075e6535a1f7434632a
This repository contains Fuchsia's Global Integration manifest files.
All changes should be made to the internal version of this repository. Our infrastructure automatically updates this version when the internal one changes.
Currently all changes must be made by a Google employee. Non-Google employees wishing to make a change can ask for assistance in one of the communication channels documented at get involved.
First install Jiri.
Next run:
$ jiri init $ jiri import minimal https://fuchsia.googlesource.com/integration $ jiri update
Third party projects should have their own subdirectory in ./third_party.