fix: Tidy up socket dispose. (#1334)

This commit is contained in:
Kamron Batman 2023-02-07 21:22:04 -08:00 • committed by GitHub
parent 14ef1ab7e5
commit 44c69620a6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 46 additions and 48 deletions

View file

@ -1091,6 +1091,12 @@ public partial class NetState : IComparable<NetState>
}
#endif
var m = Mobile;
if (m?.NetState == this)
{
m.NetState = null;
}
TcpServer.Instances.Remove(this);
try
{
@ -1104,14 +1110,8 @@ public partial class NetState : IComparable<NetState>
Connection.Close();
_handle.Free();
var m = Mobile;
Mobile = null;
if (m?.NetState == this)
{
m.NetState = null;
}
var a = Account;
Gumps.Clear();
@ -1120,6 +1120,7 @@ public partial class NetState : IComparable<NetState>
Account = null;
ServerInfo = null;
CityInfo = null;
Connection = null;
var count = TcpServer.Instances.Count;

View file

@ -5,5 +5,9 @@ namespace Server.Network;
public static class OutgoingPackets
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool CannotSendPackets(this NetState ns) => ns?.Connection == null || ns.BlockAllPackets;
public static bool CannotSendPackets(this NetState ns) =>
// Do not check for NetState.Running. Packets are sent to a "disconnected" socket as part of the OnDisconnect events
// up until the Connection is nulled. Closing the connection is done synchronously, therefore packets will not be sent
// once the Mobile.NetState is null.
ns?.Connection == null || ns.BlockAllPackets;
}