fix: Fixes sending packets and sidesteps a major issue with stackalloc and PGO in .NET 8 (#1607)

### Summary
- Works around a sneaky edge case bug in the JIT with stackalloc where sometimes the buffer is not zero'd.
- Fixes SendDisplayBoatHS
- Fixes sending health bars in the `SendEverything()` logic.
- Fixes a bug in sizing for some string helper functions.

### Developer Note
We are enabled `SkipLocalsInit` - do not rely on `stackalloc` to be zero'd. To zero the buffer, use `span.Clear();`

Closes #1606
This commit is contained in:
Kamron Batman 2023-11-21 12:18:20 -08:00 • committed by GitHub
parent 79ba1ea917
commit 03f850fe03
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 67 additions and 76 deletions

View file

@ -106,8 +106,6 @@ public static class BoatPackets
using var builder = new PacketContainerBuilder(stackalloc byte[minLength]);
Span<byte> buffer = builder.GetSpan(OutgoingEntityPackets.MaxWorldEntityPacketLength);
foreach (var entity in boat.GetMovingEntities(true))
{
if (!beholder.CanSee(entity))
@ -115,7 +113,7 @@ public static class BoatPackets
continue;
}
buffer.InitializePacket();
Span<byte> buffer = builder.GetSpan(OutgoingEntityPackets.MaxWorldEntityPacketLength).InitializePacket();
var bytesWritten = OutgoingEntityPackets.CreateWorldEntity(buffer, entity, true);
builder.Advance(bytesWritten);
}

View file

@ -106,6 +106,8 @@ namespace Server.Multis
using var planesWriter = new SpanWriter(planeLength * planeCount);
Span<bool> planesUsed = stackalloc bool[9];
planesUsed.Clear();
int index;
var totalPlaneOffsets = 0;
var totalPlanes = 0;