Skip to content

Fix RetryableMountingLayerException crash in SurfaceMountingManager.addViewAt#56654

Open
Improbability42 wants to merge 1 commit intofacebook:mainfrom
Improbability42:export-D99364621
Open

Fix RetryableMountingLayerException crash in SurfaceMountingManager.addViewAt#56654
Improbability42 wants to merge 1 commit intofacebook:mainfrom
Improbability42:export-D99364621

Conversation

@Improbability42
Copy link
Copy Markdown

Summary:

Problem

The addViewAt method in SurfaceMountingManager crashes with a RetryableMountingLayerException when trying to find a ViewState for a child tag that doesn't exist in the tagToViewState map.

Error: Unable to find viewState for tag 290. Surface stopped: false

Logview: 252c85116a7ab5c4ec93ef3c3373cf9d

Root Cause

The addViewAt method uses getViewState() which throws RetryableMountingLayerException when a tag is not found. This can happen due to race conditions where a view's state is removed (e.g., during surface cleanup or view deletion) before the mount item that references it is executed.

Fix

Replaced getViewState() calls with getNullableViewState() + null checks + soft exception logging + early return for both the parent and child tag lookups in addViewAt. This matches the existing pattern already used by removeViewAt, which handles the same scenario gracefully.

The fix:

  • Uses getNullableViewState(parentTag) instead of getViewState(parentTag) for the parent view state lookup
  • Uses getNullableViewState(tag) instead of getViewState(tag) for the child view state lookup
  • Adds null check for the child view itself
  • Logs soft exceptions with the SURFACE_MOUNTING_MANAGER_MISSING_VIEWSTATE category for monitoring
  • Returns early instead of crashing, allowing the surface to continue operating

Changelog: [Android][Fixed] - Fixed crash in SurfaceMountingManager.addViewAt when viewState is missing for a tag

Differential Revision: D99364621

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Apr 29, 2026
@meta-codesync
Copy link
Copy Markdown

meta-codesync Bot commented Apr 29, 2026

@Improbability42 has exported this pull request. If you are a Meta employee, you can view the originating Diff in D99364621.

Copy link
Copy Markdown
Contributor

@cortinico cortinico left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review automatically exported from Phabricator review in Meta.

…ddViewAt

Summary:
## Problem

The `addViewAt` method in `SurfaceMountingManager` crashes with a `RetryableMountingLayerException` when trying to find a `ViewState` for a child tag that doesn't exist in the `tagToViewState` map.

**Error:** `Unable to find viewState for tag 290. Surface stopped: false`

**Logview:** [252c85116a7ab5c4ec93ef3c3373cf9d](https://www.internalfb.com/logview/system_vros_crashes/252c85116a7ab5c4ec93ef3c3373cf9d)

## Root Cause

The `addViewAt` method uses `getViewState()` which throws `RetryableMountingLayerException` when a tag is not found. This can happen due to race conditions where a view's state is removed (e.g., during surface cleanup or view deletion) before the mount item that references it is executed.

## Fix

Replaced `getViewState()` calls with `getNullableViewState()` + null checks + soft exception logging + early return for both the parent and child tag lookups in `addViewAt`. This matches the existing pattern already used by `removeViewAt`, which handles the same scenario gracefully.

The fix:
- Uses `getNullableViewState(parentTag)` instead of `getViewState(parentTag)` for the parent view state lookup
- Uses `getNullableViewState(tag)` instead of `getViewState(tag)` for the child view state lookup
- Adds null check for the child view itself
- Logs soft exceptions with the `SURFACE_MOUNTING_MANAGER_MISSING_VIEWSTATE` category for monitoring
- Returns early instead of crashing, allowing the surface to continue operating

Changelog: [Android][Fixed] - Fixed crash in SurfaceMountingManager.addViewAt when viewState is missing for a tag

Differential Revision: D99364621
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. fb-exported meta-exported p: Facebook Partner: Facebook Partner

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants