Fix crashes when saving layers to USD files in specific edge cases. #4018
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This addresses a crash encountered in production assets since maya-usd v0.30.0. The crash occurs during the save to USD operation, it is triggered by dereferencing a null
SdfLayerHandle
returned byUsdStage::GetUsedLayers(true)
inLayerDatabase::saveUsdToMayaFile
. Maya outputs this error:Upon investigation, the crash is linked to the presence of USD value clips using auto-generated manifest layers in the stage. The auto-generated manifest layer - returned by GetUsedLayers(true) - becomes null after a stage recomposition. This recomposition is triggered midway through the "save loop" within
MayaUsd::utils::saveLayerWithFormat
, as the stage cache is updated to reflect potential layer path changes.Unfortunately, the issue occurs with very complex production scenes that I cannot share, and I have not been able to reproduce it with simpler scenes yet.
Included changes
UsdStage::GetUsedLayers()
, even though null layers are not expected, to handle edge cases like this gracefully.