While monitoring the parent process CRC doesn't need a full access process handle on Windows. Open the handle using limited acccess flags instead.
#rb stefan.boberg
#jira UE-88601, UE-88978
#lockdown stefan.boberg
#ushell-cherrypick of 11458913 by Johan.Berg
#ushell-cherrypick of 11458942 by Johan.Berg
[CL 11536303 by Johan Berg in 4.25 branch]
#jira UE-88070 - UnrealDisasterRecoveryService paths are too long
- Renamed UnrealDisasterRecoveryService as UnrealRecoverySvc
- Set a ConcertSyncServer ShortName as "CncrtSyncSvr" to ensure shorter build path.
The change saves 29 characters on the offending path. The path before vs the path after:
Engine\Plugins\Developer\Concert\ConcertSync\ConcertSyncServer\Intermediate\Build\Win64\UnrealDisasterRecoveryService\Development\ConcertSyncServer\UnrealDisasterRecoveryService-ConcertSyncServer.lib (Before, 199 chars)
Engine\Plugins\Developer\Concert\ConcertSync\ConcertSyncServer\Intermediate\Build\Win64\UnrealRecoverySvc\Development\CncrtSyncSvr\UnrealRecoverySvc-ConcertSyncServer.lib (After, 170 chars)
#rb Jamie.Dale
Edigrated 11281991 from Dev-VirtualProduction
[CL 11516806 by Patrick Laflamme in 4.25 branch]
- Fixed disaster recovery remote endpoint timeout set to zero, preventing it from re-registering with MessageBus when an error occurred (like the socket disconnected).
#jira UE-87899 - Disaster recovery prevents showing the crash reporting UI in a timely manner if the session is large
- Fixed the crash reporter app to display the UI (asking the user to send the bug report) before shutting down the recovery service.
- Renamed the field FDisasterRecoveryInfo::Version into FDisasterRecoveryInfo::Revision because revision is more accurate for the field.
#rb Jamie.Dale
Edigrated 11250824 from Dev-VirtualProduction.
[CL 11515425 by Patrick Laflamme in 4.25 branch]
- Prevented CrashReportClient::FinalizeDiagnoseReportWorker() function to called after the CrashReportClient instance was deleted.
Details:
The FDiagnoseReportWorker asynchronous task created an extra asynchronous tasks (calling back CrashReportClient instance) that could fire after the targetted CrashReportClient instance was deleted. The solutions moves the logic to 'finilize' the report in the tick function that is expected to run in the game thread and make 'Close Without Sending' flows like 'Send and Close'/'Send and Restart' but without sending anything.
#rb Francis.Hurteau
#lockdown cristina.riveron
Edigated 11462889 from 4.24
[CL 11512537 by Patrick Laflamme in 4.25 branch]
- Added a 60 seconds grace period for the Editor process to exit so that we can read its exit code.
#rb Francis.Hurteau
#lockdown cristina.riveron
#ROBOMERGE-OWNER: patrick.laflamme
#ROBOMERGE-AUTHOR: patrick.laflamme
#ROBOMERGE-SOURCE: CL 11507818 in //UE4/Release-4.24/...
#ROBOMERGE-BOT: RELEASE (Release-4.24 -> Release-4.25) (v654-11333218)
[CL 11508156 by patrick laflamme in 4.25 branch]
## Summary
`UnrealTargetPlatform` and `UnrealPlatformGroup` are partial structs which each have a static member variable declared like this:
private static UniqueStringRegistry StringRegistry = new UniqueStringRegistry();
These partial structs have additional implementations in /Engine/Platforms/XXX/Source/Programs/UnrealBuildTool/UEBuildXXX.cs, which also have static member variables declared like this:
public static UnrealTargetPlatform XXX = FindOrAddByName("XXX");
`FindOrAddByName()` is a static method on `UnrealTargetPlatform` and `UnrealPlatformGroup` which accesses `StringRegistry` and requires it to be initialized i.e. non-null.
It appears that there's no guarantee in .NET runtime that the static member variables in the "original" implementation of the partial structs will be initialized _before_ the ones from the "additional" implementations. This means `XXX` above can be initialized in the additonal implementation before `StringRegistry` has been initialized in the original implementation, which means it's still null when `FindOrAddByName()` is called so the tool crashes.
In practice, this is 100% reproducible in our public GitHub mirror when opening `UnrealBuildTool.csproj` with VisualStudio Mac. This IDE rewrites the project file which affects when / how UEBuildXXX.cs is compiled, and static member variables for these partial structs end up being initialized out or order.
The only solution I found that worked was to replace all accesses to the `StringRegistry` static member variables by a wrapper function `GetUniqueStringRegistry()` which takes care of initializing it - only once. Since all this happens while the tool launches, this code should not need to be multithread aware / re-entrant.
NOTE: There is another partial struct `RestrictedFolder` in this codebase which also use `UniqueStringRegistry` in a similar way but the 2 implementations are in the same source file, so the bug may not happen and I left the implementation untouched.
## Test Plan
- Opened `UnrealBuildTool.csproj` with VisualStudio Mac
- Built UnrealBuildTool and verified it crashed on launch due to `StringRegistry` being NULL when used by `FindOrAddByName()`
- Confirmed the crash doesn't happen anymore after applying this change and that the `StringRegistry` static member variable was only set once by `GetUniqueStringRegistry()`
#jira UE-88908
#rb ben.marsh
[CL 11498874 by PierreOlivier Latour in 4.25 branch]
Fixing crash in 3ds Max Exporter, autodesk noise map are not supported.
#jira UE-88193
#review-11287723 Julien.StJean
#rb Julien.StJean
[CL 11462019 by benoit deschenes in 4.25 branch]
- This prevents an error being displayed in the log before staging.
#review-11458300 @jack.porter
#jira UE-86335
#rb jack.porter
[CL 11458335 by Anthony Bills in 4.25 branch]
Includes BuildForLinuxAArch64.sh cross compilation scripts
Adds LinuxAArch64 back to installed engine builds (CL 11419001)
#jira UE-88745
#rb Brandon.Schaefer
[CL 11452535 by Michael Sartain in 4.25 branch]