| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
| Code-Review | +1 |
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
| Code-Review | +1 |
LGTM with a formatting nit
Please click the "format" button underneath the commit message to rewrap the lines in this message to the correct column width.
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
Please click the "format" button underneath the commit message to rewrap the lines in this message to the correct column width.
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |
1 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted one.
WebNN: Build services/webnn/host as a component to fix duplicate singleton
Fixes a browser-process crash on Windows during WebNN ORT context
creation:
[WebNN] [OpenVINOExecutionProvider] is already in ready state before
`EnsureReadyAsync()` is called.
`ExecutionProviderInitializer` is a process-wide singleton whose state
machine is designed to run `Initialize()` exactly once: the first
`EnsureExecutionProvidersReady()` call activates the EP catalog and
posts `Initialize()`, which calls `EnsureReadyAsync()` on each provider
and drives it to the Ready state.
But `services/webnn/host` was a `source_set`, which in a component build
is statically linked into every dependent component. It is depended on
by both `content.dll` and `components_viz_host.dll`, and the browser
process loads both, so each got its own copy of the singleton's `static`
storage -- two `ExecutionProviderInitializer` instances in one process
(observed as two distinct `this` pointers on the same thread).
Both instances ran `Initialize()`. The first drove the providers to the
Ready state; the second then found a provider already Ready before it
had called `EnsureReadyAsync()` and hit the `LOG(FATAL)`, crashing the
browser.
Build `//services/webnn/host` as a `component()` instead of a
`source_set()` and export its public symbols with
`COMPONENT_EXPORT(WEBNN_HOST)`. As a component it links into its own
shared library, so `content.dll` and `components_viz_host.dll` share a
single copy of the code and thus a single
`ExecutionProviderInitializer`. `Initialize()` now runs exactly once.
| Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. |