diff --git a/Razor/Network/Packet.cs b/Razor/Network/Packet.cs index b0417d80..36ad5f2c 100644 --- a/Razor/Network/Packet.cs +++ b/Razor/Network/Packet.cs @@ -18,6 +18,7 @@ using System; using System.IO; +using System.Runtime.InteropServices; using System.Text; namespace Assistant @@ -789,6 +790,7 @@ public unsafe sealed class PacketReader private int m_Pos; private int m_Length; private bool m_Dyn; + private GCHandle m_Handle; public PacketReader(byte* buff, int len, bool dyn) { @@ -796,17 +798,24 @@ public PacketReader(byte* buff, int len, bool dyn) m_Length = len; m_Pos = 0; m_Dyn = dyn; + GC.SuppressFinalize(this); } public PacketReader(byte[] buff, bool dyn) { - fixed (byte* p = buff) - m_Data = p; + m_Handle = GCHandle.Alloc(buff, GCHandleType.Pinned); + m_Data = (byte*)m_Handle.AddrOfPinnedObject(); m_Length = buff.Length; m_Pos = 0; m_Dyn = dyn; } + ~PacketReader() + { + if (m_Handle.IsAllocated) + m_Handle.Free(); + } + public void MoveToData() { m_Pos = m_Dyn ? 3 : 1;