NetworkComms.Net icon indicating copy to clipboard operation
NetworkComms.Net copied to clipboard

Dead lock with bad locking.

Open billw2012 opened this issue 8 years ago • 1 comments

SendPacket can cause RemoveConnectionReference and AddConnectionReference can call SendPacket. The first takes sendLocker then globalDictAndDelegateLocker, the second takes them in reverse.

NetworkCommsDotNetComplete.dll!NetworkCommsDotNet.Connections.Connection.SendPacket<byte[]>(NetworkCommsDotNet.IPacket packet, out long packetSequenceNumber) Line 527	 
NetworkCommsDotNetComplete.dll!NetworkCommsDotNet.Connections.Connection.SendReceiveObject<byte[], byte[]>(string sendingPacketTypeStr, string expectedReturnPacketTypeStr, int returnPacketTimeOutMilliSeconds, byte[] sendObject, NetworkCommsDotNet.SendReceiveOptions sendOptions, NetworkCommsDotNet.SendReceiveOptions receiveOptions, out long sentPacketSequenceNumber) Line 256	 
NetworkCommsDotNetComplete.dll!NetworkCommsDotNet.Connections.Connection.ConnectionAlive(int aliveRespondTimeoutMS, out long responseTimeMS) Line 474	 
NetworkCommsDotNetComplete.dll!NetworkCommsDotNet.Connections.Connection.ConnectionAlive() Line 428	 
NetworkCommsDotNetComplete.dll!NetworkCommsDotNet.NetworkComms.AddConnectionReferenceByRemoteEndPoint(NetworkCommsDotNet.Connections.Connection connection, System.Net.EndPoint remoteEndPointToUse, System.Net.EndPoint localEndPointToUse) Line 1897	 
NetworkCommsDotNetComplete.dll!NetworkCommsDotNet.NetworkComms.UpdateConnectionReferenceByEndPoint(NetworkCommsDotNet.Connections.Connection connection, System.Net.EndPoint newRemoteEndPoint, System.Net.EndPoint newLocalEndPoint) Line 1985	 
NetworkCommsDotNetComplete.dll!NetworkCommsDotNet.Connections.Connection.ConnectionSetupHandlerFinal(NetworkCommsDotNet.ConnectionInfo remoteConnectionInfo, ref bool possibleClashWithExistingConnection, ref NetworkCommsDotNet.Connections.Connection existingConnection) Line 488	 
NetworkCommsDotNetComplete.dll!NetworkCommsDotNet.Connections.Connection.ConnectionSetupHandler(System.IO.MemoryStream packetDataSection) Line 343	 
NetworkCommsDotNetComplete.dll!NetworkCommsDotNet.NetworkComms.CompleteIncomingItemTask(object priorityQueueItemObj) Line 334	 
NetworkCommsDotNetComplete.dll!NetworkCommsDotNet.Connections.Connection.IncomingPacketHandleHandOff(NetworkCommsDotNet.Tools.PacketBuilder packetBuilder) Line 163	 
NetworkCommsDotNetComplete.dll!NetworkCommsDotNet.Connections.TCP.TCPConnection.IncomingTCPPacketHandler(System.IAsyncResult ar) Line 405	 

NetworkCommsDotNetComplete.dll!NetworkCommsDotNet.NetworkComms.RemoveConnectionReference(NetworkCommsDotNet.Connections.Connection connection, bool maintainConnectionInfoHistory) Line 1809	 
NetworkCommsDotNetComplete.dll!NetworkCommsDotNet.Connections.Connection.CloseConnection(bool closeDueToError, int logLocation) Line 369	 
NetworkCommsDotNetComplete.dll!NetworkCommsDotNet.Connections.Connection.SendPacket<object>(NetworkCommsDotNet.IPacket packet, out long packetSequenceNumber) Line 659	 
NetworkCommsDotNetComplete.dll!NetworkCommsDotNet.Connections.Connection.SendReceiveObject<object, string[]>(string sendingPacketTypeStr, string expectedReturnPacketTypeStr, int returnPacketTimeOutMilliSeconds, object sendObject, NetworkCommsDotNet.SendReceiveOptions sendOptions, NetworkCommsDotNet.SendReceiveOptions receiveOptions, out long sentPacketSequenceNumber) Line 256	 
NetworkCommsDotNetComplete.dll!NetworkCommsDotNet.Connections.Connection.SendReceiveObject<object, string[]>(string sendingPacketTypeStr, string expectedReturnPacketTypeStr, int returnPacketTimeOutMilliSeconds, object sendObject, NetworkCommsDotNet.SendReceiveOptions sendOptions, NetworkCommsDotNet.SendReceiveOptions receiveOptions) Line 201	 
NetworkCommsDotNetComplete.dll!NetworkCommsDotNet.Connections.Connection.SendReceiveObject<string[]>(string sendingPacketTypeStr, string expectedReturnPacketTypeStr, int returnPacketTimeOutMilliSeconds) Line 298	 

billw2012 avatar Apr 26 '17 13:04 billw2012

Good spot! If you would be willing to raise a PR for this I'd happily merge it in.

MarcFletcher avatar May 03 '17 19:05 MarcFletcher