diff options
Diffstat (limited to 'OpenSim/Region/ClientStack/Linden')
-rw-r--r-- | OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs index 25e10be..85fe1a4 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs | |||
@@ -69,9 +69,22 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
69 | 69 | ||
70 | StatsManager.RegisterStat( | 70 | StatsManager.RegisterStat( |
71 | new Stat( | 71 | new Stat( |
72 | "ClientLogoutsDueToNoReceives", | ||
73 | "Number of times a client has been logged out because no packets were received before the timeout.", | ||
74 | "", | ||
75 | "", | ||
76 | "clientstack", | ||
77 | scene.Name, | ||
78 | StatType.Pull, | ||
79 | MeasuresOfInterest.None, | ||
80 | stat => stat.Value = m_udpServer.ClientLogoutsDueToNoReceives, | ||
81 | StatVerbosity.Debug)); | ||
82 | |||
83 | StatsManager.RegisterStat( | ||
84 | new Stat( | ||
72 | "IncomingUDPReceivesCount", | 85 | "IncomingUDPReceivesCount", |
73 | "Number of UDP receives performed", | 86 | "Number of UDP receives performed", |
74 | "Number of UDP receives performed", | 87 | "", |
75 | "", | 88 | "", |
76 | "clientstack", | 89 | "clientstack", |
77 | scene.Name, | 90 | scene.Name, |
@@ -84,7 +97,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
84 | new Stat( | 97 | new Stat( |
85 | "IncomingPacketsProcessedCount", | 98 | "IncomingPacketsProcessedCount", |
86 | "Number of inbound LL protocol packets processed", | 99 | "Number of inbound LL protocol packets processed", |
87 | "Number of inbound LL protocol packets processed", | 100 | "", |
88 | "", | 101 | "", |
89 | "clientstack", | 102 | "clientstack", |
90 | scene.Name, | 103 | scene.Name, |
@@ -97,7 +110,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
97 | new Stat( | 110 | new Stat( |
98 | "OutgoingUDPSendsCount", | 111 | "OutgoingUDPSendsCount", |
99 | "Number of UDP sends performed", | 112 | "Number of UDP sends performed", |
100 | "Number of UDP sends performed", | 113 | "", |
101 | "", | 114 | "", |
102 | "clientstack", | 115 | "clientstack", |
103 | scene.Name, | 116 | scene.Name, |
@@ -149,6 +162,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
149 | /// <summary>Maximum transmission unit, or UDP packet size, for the LLUDP protocol</summary> | 162 | /// <summary>Maximum transmission unit, or UDP packet size, for the LLUDP protocol</summary> |
150 | public const int MTU = 1400; | 163 | public const int MTU = 1400; |
151 | 164 | ||
165 | /// <summary>Number of forced client logouts due to no receipt of packets before timeout.</summary> | ||
166 | public int ClientLogoutsDueToNoReceives { get; private set; } | ||
167 | |||
152 | /// <summary> | 168 | /// <summary> |
153 | /// Default packet debug level given to new clients | 169 | /// Default packet debug level given to new clients |
154 | /// </summary> | 170 | /// </summary> |
@@ -1046,7 +1062,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1046 | // Fire this out on a different thread so that we don't hold up outgoing packet processing for | 1062 | // Fire this out on a different thread so that we don't hold up outgoing packet processing for |
1047 | // everybody else if this is being called due to an ack timeout. | 1063 | // everybody else if this is being called due to an ack timeout. |
1048 | // This is the same as processing as the async process of a logout request. | 1064 | // This is the same as processing as the async process of a logout request. |
1049 | Util.FireAndForget(o => DeactivateClientDueToTimeout(client)); | 1065 | Util.FireAndForget(o => DeactivateClientDueToTimeout(client, timeoutTicks)); |
1050 | 1066 | ||
1051 | return; | 1067 | return; |
1052 | } | 1068 | } |
@@ -1770,18 +1786,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1770 | /// regular client pings. | 1786 | /// regular client pings. |
1771 | /// </remarks> | 1787 | /// </remarks> |
1772 | /// <param name='client'></param> | 1788 | /// <param name='client'></param> |
1773 | private void DeactivateClientDueToTimeout(LLClientView client) | 1789 | /// <param name='timeoutTicks'></param> |
1790 | private void DeactivateClientDueToTimeout(LLClientView client, int timeoutTicks) | ||
1774 | { | 1791 | { |
1775 | lock (client.CloseSyncLock) | 1792 | lock (client.CloseSyncLock) |
1776 | { | 1793 | { |
1794 | ClientLogoutsDueToNoReceives++; | ||
1795 | |||
1777 | m_log.WarnFormat( | 1796 | m_log.WarnFormat( |
1778 | "[LLUDPSERVER]: Ack timeout, disconnecting {0} agent for {1} in {2}", | 1797 | "[LLUDPSERVER]: No packets received from {0} agent of {1} for {2}ms in {3}. Disconnecting.", |
1779 | client.SceneAgent.IsChildAgent ? "child" : "root", client.Name, m_scene.RegionInfo.RegionName); | 1798 | client.SceneAgent.IsChildAgent ? "child" : "root", client.Name, timeoutTicks, m_scene.Name); |
1780 | |||
1781 | StatsManager.SimExtraStats.AddAbnormalClientThreadTermination(); | ||
1782 | 1799 | ||
1783 | if (!client.SceneAgent.IsChildAgent) | 1800 | if (!client.SceneAgent.IsChildAgent) |
1784 | client.Kick("Simulator logged you out due to connection timeout"); | 1801 | client.Kick("Simulator logged you out due to connection timeout."); |
1785 | 1802 | ||
1786 | client.CloseWithoutChecks(); | 1803 | client.CloseWithoutChecks(); |
1787 | } | 1804 | } |