aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2012-12-19 01:51:30 +0000
committerJustin Clark-Casey (justincc)2012-12-19 01:51:30 +0000
commitae67435146d65e1241c15677952f7d4a05ee794c (patch)
treee459245eccab8b35dacd1c3fc77e3517a1393770 /OpenSim/Region
parentMerge branch 'master' of ssh://opensimulator.org/var/git/opensim (diff)
downloadopensim-SC_OLD-ae67435146d65e1241c15677952f7d4a05ee794c.zip
opensim-SC_OLD-ae67435146d65e1241c15677952f7d4a05ee794c.tar.gz
opensim-SC_OLD-ae67435146d65e1241c15677952f7d4a05ee794c.tar.bz2
opensim-SC_OLD-ae67435146d65e1241c15677952f7d4a05ee794c.tar.xz
Disable UDPPacketBuffer pooling for now to resolve an issue on Windows of interference between incoming packets.
On Windows, concurrent multi-threaded processing of inbound UDP somehow allows different data input processing to interfere with each other. Possibly the endpoint reference is being switched, though I don't yet know the mechanism. Not seen on Mono. Also resolveable by setting RecyclePackets = false or RecycleBaseUDPPackets = false in [PacketPool] Or async_packet_handling = false in [ClientStack.LindenUDP] For now, will simply disable this particular pooling though will revisit this issue. In response to http://opensimulator.org/mantis/view.php?id=6468
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/OpenSimUDPBase.cs13
1 files changed, 8 insertions, 5 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/OpenSimUDPBase.cs b/OpenSim/Region/ClientStack/Linden/UDP/OpenSimUDPBase.cs
index 3f7ca2b..f143c32 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/OpenSimUDPBase.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/OpenSimUDPBase.cs
@@ -208,9 +208,12 @@ namespace OpenMetaverse
208 { 208 {
209 UDPPacketBuffer buf; 209 UDPPacketBuffer buf;
210 210
211 if (UsePools) 211 // FIXME: Disabled for now as this causes issues with reused packet objects interfering with each other
212 buf = Pool.GetObject(); 212 // on Windows with m_asyncPacketHandling = true, though this has not been seen on Linux.
213 else 213 // Possibly some unexpected issue with fetching UDP data concurrently with multiple threads. Requires more investigation.
214// if (UsePools)
215// buf = Pool.GetObject();
216// else
214 buf = new UDPPacketBuffer(); 217 buf = new UDPPacketBuffer();
215 218
216 if (IsRunningInbound) 219 if (IsRunningInbound)
@@ -291,8 +294,8 @@ namespace OpenMetaverse
291 catch (ObjectDisposedException) { } 294 catch (ObjectDisposedException) { }
292 finally 295 finally
293 { 296 {
294 if (UsePools) 297// if (UsePools)
295 Pool.ReturnObject(buffer); 298// Pool.ReturnObject(buffer);
296 299
297 // Synchronous mode waits until the packet callback completes 300 // Synchronous mode waits until the packet callback completes
298 // before starting the receive to fetch another packet 301 // before starting the receive to fetch another packet