Fixing lots of places which created USTRUCTs with operator new and passed them to FMessageEndpoint::Publish or Send, wich crashes when ASAN is used.

The messaging system destroys these objects with FMemory::Free, which has different alignment logic than operator new when ASAN is used, resulting in a crash.

#jira none
#rnx
#rb Jerome.Delattre, Matt.Peters

#ROBOMERGE-SOURCE: CL 17116813 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v855-17104924)

[CL 17116851 by mihnea balta in ue5-release-engine-test branch]
This commit is contained in:
mihnea balta
2021-08-10 10:58:07 -04:00
parent be05ec480b
commit cfe83027c3
27 changed files with 84 additions and 108 deletions

View File

@@ -242,9 +242,7 @@ bool FTargetDeviceService::Start()
ClaimHost = FPlatformProcess::ComputerName();
ClaimUser = FPlatformProcess::UserName(false);
// message is going to be deleted by FMemory::Free() (see FMessageContext destructor), so allocate it with Malloc
void* Memory = FMemory::Malloc(sizeof(FTargetDeviceClaimed), alignof(FTargetDeviceClaimed));
MessageEndpoint->Publish(new(Memory) FTargetDeviceClaimed(DeviceName, ClaimHost, ClaimUser));
MessageEndpoint->Publish(FMessageEndpoint::MakeMessage<FTargetDeviceClaimed>(DeviceName, ClaimHost, ClaimUser));
Running = true;
}
@@ -258,8 +256,7 @@ void FTargetDeviceService::Stop()
if (Running)
{
// message is going to be deleted by FMemory::Free() (see FMessageContext destructor), so allocate it with Malloc
void* Memory = FMemory::Malloc(sizeof(FTargetDeviceUnclaimed), alignof(FTargetDeviceUnclaimed));
MessageEndpoint->Publish(new(Memory) FTargetDeviceUnclaimed(DeviceName, FPlatformProcess::ComputerName(), FPlatformProcess::UserName(false)));
MessageEndpoint->Publish(FMessageEndpoint::MakeMessage<FTargetDeviceUnclaimed>(DeviceName, FPlatformProcess::ComputerName(), FPlatformProcess::UserName(false)));
FPlatformProcess::SleepNoStats(0.01);
// Only stop the device if we care about device claiming
@@ -356,9 +353,7 @@ void FTargetDeviceService::HandleClaimedMessage(const FTargetDeviceClaimed& Mess
{
if (Context->GetSender() != MessageEndpoint->GetAddress())
{
// message is going to be deleted by FMemory::Free() (see FMessageContext destructor), so allocate it with Malloc
void* Memory = FMemory::Malloc(sizeof(FTargetDeviceClaimDenied), alignof(FTargetDeviceClaimDenied));
MessageEndpoint->Send(new(Memory) FTargetDeviceClaimDenied(DeviceName, FPlatformProcess::ComputerName(), FPlatformProcess::UserName(false)), Context->GetSender());
MessageEndpoint->Send(FMessageEndpoint::MakeMessage<FTargetDeviceClaimDenied>(DeviceName, FPlatformProcess::ComputerName(), FPlatformProcess::UserName(false)), Context->GetSender());
}
}
else