diff --git a/Lidgren.Network/NetConnectionStatistics.cs b/Lidgren.Network/NetConnectionStatistics.cs
index 1affbc2..c0756f7 100644
--- a/Lidgren.Network/NetConnectionStatistics.cs
+++ b/Lidgren.Network/NetConnectionStatistics.cs
@@ -171,7 +171,7 @@ namespace Lidgren.Network
if (m_resentMessagesDueToDelay > 0)
bdr.AppendLine("Resent messages (delay): " + m_resentMessagesDueToDelay);
- if (m_resentMessagesDueToDelay > 0)
+ if (m_resentMessagesDueToHole > 0)
bdr.AppendLine("Resent messages (holes): " + m_resentMessagesDueToHole);
int numUnsent = 0;
diff --git a/Lidgren.Network/NetPeer.cs b/Lidgren.Network/NetPeer.cs
index 8590e8e..3e59e2b 100644
--- a/Lidgren.Network/NetPeer.cs
+++ b/Lidgren.Network/NetPeer.cs
@@ -244,12 +244,20 @@ namespace Lidgren.Network
Recycle(msg);
}
+ static NetEndPoint GetNetEndPoint(string host, int port)
+ {
+ IPAddress address = NetUtility.Resolve(host);
+ if (address == null)
+ throw new NetException("Could not resolve host");
+ return new NetEndPoint(address, port);
+ }
+
///
/// Create a connection to a remote endpoint
///
public NetConnection Connect(string host, int port)
{
- return Connect(new NetEndPoint(NetUtility.Resolve(host), port), null);
+ return Connect(GetNetEndPoint(host, port), null);
}
///
@@ -257,7 +265,7 @@ namespace Lidgren.Network
///
public NetConnection Connect(string host, int port, NetOutgoingMessage hailMessage)
{
- return Connect(new NetEndPoint(NetUtility.Resolve(host), port), hailMessage);
+ return Connect(GetNetEndPoint(host, port), hailMessage);
}
///
diff --git a/Lidgren.Network/NetPeerStatistics.cs b/Lidgren.Network/NetPeerStatistics.cs
index 841bf0f..093bd5c 100644
--- a/Lidgren.Network/NetPeerStatistics.cs
+++ b/Lidgren.Network/NetPeerStatistics.cs
@@ -105,7 +105,14 @@ namespace Lidgren.Network
///
/// Gets the number of bytes in the recycled pool
///
- public int BytesInRecyclePool { get { return m_peer.m_storagePoolBytes; } }
+ public int BytesInRecyclePool
+ {
+ get
+ {
+ lock (m_peer.m_storagePool)
+ return m_peer.m_storagePoolBytes;
+ }
+ }
#if !USE_RELEASE_STATISTICS
[Conditional("DEBUG")]
diff --git a/Lidgren.Network/NetQueue.cs b/Lidgren.Network/NetQueue.cs
index 475bc37..25a015b 100644
--- a/Lidgren.Network/NetQueue.cs
+++ b/Lidgren.Network/NetQueue.cs
@@ -56,12 +56,29 @@ namespace Lidgren.Network
///
/// Gets the number of items in the queue
///
- public int Count { get { return m_size; } }
+ public int Count {
+ get
+ {
+ m_lock.EnterReadLock();
+ int count = m_size;
+ m_lock.ExitReadLock();
+ return count;
+ }
+ }
///
/// Gets the current capacity for the queue
///
- public int Capacity { get { return m_items.Length; } }
+ public int Capacity
+ {
+ get
+ {
+ m_lock.EnterReadLock();
+ int capacity = m_items.Length;
+ m_lock.ExitReadLock();
+ return capacity;
+ }
+ }
///
/// NetQueue constructor
diff --git a/Lidgren.Network/NetUPnP.cs b/Lidgren.Network/NetUPnP.cs
index b983a66..217602f 100644
--- a/Lidgren.Network/NetUPnP.cs
+++ b/Lidgren.Network/NetUPnP.cs
@@ -97,7 +97,9 @@ namespace Lidgren.Network
{
#endif
XmlDocument desc = new XmlDocument();
- desc.Load(WebRequest.Create(resp).GetResponse().GetResponseStream());
+ using (var response = WebRequest.Create(resp).GetResponse())
+ desc.Load(response.GetResponseStream());
+
XmlNamespaceManager nsMgr = new XmlNamespaceManager(desc.NameTable);
nsMgr.AddNamespace("tns", "urn:schemas-upnp-org:device-1-0");
XmlNode typen = desc.SelectSingleNode("//tns:device/tns:deviceType/text()", nsMgr);
@@ -263,11 +265,12 @@ namespace Lidgren.Network
r.ContentType = "text/xml; charset=\"utf-8\"";
r.ContentLength = b.Length;
r.GetRequestStream().Write(b, 0, b.Length);
- XmlDocument resp = new XmlDocument();
- WebResponse wres = r.GetResponse();
- Stream ress = wres.GetResponseStream();
- resp.Load(ress);
- return resp;
+ using (WebResponse wres = r.GetResponse()) {
+ XmlDocument resp = new XmlDocument();
+ Stream ress = wres.GetResponseStream();
+ resp.Load(ress);
+ return resp;
+ }
}
}
}
\ No newline at end of file
diff --git a/Lidgren.Network/NetUtility.cs b/Lidgren.Network/NetUtility.cs
index a8bafd2..a81ae09 100644
--- a/Lidgren.Network/NetUtility.cs
+++ b/Lidgren.Network/NetUtility.cs
@@ -72,7 +72,7 @@ namespace Lidgren.Network
public static NetEndPoint Resolve(string ipOrHost, int port)
{
var adr = Resolve(ipOrHost);
- return new NetEndPoint(adr, port);
+ return adr == null ? null : new NetEndPoint(adr, port);
}
private static IPAddress s_broadcastAddress;