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:
parent
79ba1ea917
commit
03f850fe03
18 changed files with 67 additions and 76 deletions
|
|
@ -82,27 +82,14 @@ public static class StringHelpers
|
|||
return "";
|
||||
}
|
||||
|
||||
Span<char> span = a.Length < 1024 ? stackalloc char[a.Length] : null;
|
||||
char[] chrs;
|
||||
if (span == null)
|
||||
{
|
||||
chrs = STArrayPool<char>.Shared.Rent(a.Length);
|
||||
span = chrs.AsSpan();
|
||||
}
|
||||
else
|
||||
{
|
||||
chrs = null;
|
||||
}
|
||||
char[] chrs = STArrayPool<char>.Shared.Rent(a.Length);
|
||||
var span = chrs.AsSpan(0, a.Length);
|
||||
|
||||
a.Remove(b, comparison, span, out var size);
|
||||
|
||||
var str = span[..size].ToString();
|
||||
|
||||
if (chrs != null)
|
||||
{
|
||||
STArrayPool<char>.Shared.Return(chrs);
|
||||
}
|
||||
|
||||
STArrayPool<char>.Shared.Return(chrs);
|
||||
return str;
|
||||
}
|
||||
|
||||
|
|
@ -114,17 +101,8 @@ public static class StringHelpers
|
|||
return value;
|
||||
}
|
||||
|
||||
Span<char> span = value.Length < 1024 ? stackalloc char[value.Length] : null;
|
||||
char[] chrs;
|
||||
if (span == null)
|
||||
{
|
||||
chrs = STArrayPool<char>.Shared.Rent(value.Length);
|
||||
span = chrs.AsSpan();
|
||||
}
|
||||
else
|
||||
{
|
||||
chrs = null;
|
||||
}
|
||||
char[] chrs = STArrayPool<char>.Shared.Rent(value.Length);
|
||||
var span = chrs.AsSpan(0, value.Length);
|
||||
|
||||
var sliced = value.AsSpan();
|
||||
// Copy over the previous span
|
||||
|
|
@ -161,11 +139,7 @@ public static class StringHelpers
|
|||
|
||||
var str = span.ToString();
|
||||
|
||||
if (chrs != null)
|
||||
{
|
||||
STArrayPool<char>.Shared.Return(chrs);
|
||||
}
|
||||
|
||||
STArrayPool<char>.Shared.Return(chrs);
|
||||
return str;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue