You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
I wasn't able to reproduce the deadlock, but from the reported callstack, the following lock inversion happens: * EditorSurfaceDataSystemComponent::OnCatalogLoaded locked the AssetCatalogRequestBus mutex by calling EnumerateAssets, and then locked m_assetMutex inside GetAsset->FindOrCreateAsset inside the enumerate callback. * Loading threads would lock m_assetMutex in AssetManager::ValidateAndRegisterAssetLoading, then lock the AssetCatalogRequestBus inside the Asset<T> copy constructor when calling UpdateDebugStatus when the constructor calls SetData->UpgradeAssetInfo->UpdateAssetInfo->AssetCatalogRequestBus::GetAssetInfoById This should solve the lock inversion on both sides of the problem: * UpdateDebugStatus now takes in a const ref instead of a copy, so the copy constructor isn't called. * EditorSurfaceDataSystemComponent::OnCatalogLoaded is rewritten to call GetAsset outside of the enumeration call. As a bonus, this also removes the blocking load call. The rest of the code already supports asynchronous refreshes as the list assets are added / modified / removed, so this code was changed to leverage the asynchronous refreshes as well. |
5 years ago | |
|---|---|---|
| .. | ||
| Components | 5 years ago | |
| Editor | 5 years ago | |
| SurfaceDataEditorModule.cpp | 5 years ago | |
| SurfaceDataEditorModule.h | 5 years ago | |
| SurfaceDataModule.cpp | 5 years ago | |
| SurfaceDataModule.h | 5 years ago | |
| SurfaceDataSystemComponent.cpp | 5 years ago | |
| SurfaceDataSystemComponent.h | 5 years ago | |
| SurfaceDataUtility.cpp | 5 years ago | |
| SurfaceData_precompiled.cpp | 5 years ago | |
| SurfaceData_precompiled.h | 5 years ago | |
| SurfaceTag.cpp | 5 years ago | |
| TerrainSurfaceDataSystemComponent.cpp | 5 years ago | |
| TerrainSurfaceDataSystemComponent.h | 5 years ago | |