diff options
author | Justin Clark-Casey (justincc) | 2012-12-19 01:51:30 +0000 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2012-12-19 01:51:30 +0000 |
commit | ae67435146d65e1241c15677952f7d4a05ee794c (patch) | |
tree | e459245eccab8b35dacd1c3fc77e3517a1393770 /OpenSim/Region/ClientStack/Linden/UDP | |
parent | Merge branch 'master' of ssh://opensimulator.org/var/git/opensim (diff) | |
download | opensim-SC-ae67435146d65e1241c15677952f7d4a05ee794c.zip opensim-SC-ae67435146d65e1241c15677952f7d4a05ee794c.tar.gz opensim-SC-ae67435146d65e1241c15677952f7d4a05ee794c.tar.bz2 opensim-SC-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/ClientStack/Linden/UDP')
-rw-r--r-- | OpenSim/Region/ClientStack/Linden/UDP/OpenSimUDPBase.cs | 13 |
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 |