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

@ -140,15 +140,14 @@ namespace Server.Engines.PartySystem
return;
}
Span<byte> buffer = stackalloc byte[10];
var writer = new SpanWriter(buffer);
var writer = new SpanWriter(stackalloc byte[10]);
writer.Write((byte)0xBF); // Packet ID
writer.Write((ushort)10);
writer.Write((ushort)0x06); // Sub-packet
writer.Write((byte)0x07); // command
writer.Write(leader);
ns.Send(buffer);
ns.Send(writer.Span);
}
}
}

View file

@ -86,6 +86,8 @@ public class ImageTypeInfo
var length = m_Table.Length;
Span<bool> list = stackalloc bool[length];
list.Clear();
var imageTypes = new ImageType[count];
var i = 0;
@ -100,4 +102,4 @@ public class ImageTypeInfo
return imageTypes;
}
}
}