diff options
Diffstat (limited to 'OpenSim/Region/ClientStack')
-rw-r--r-- | OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | 52 |
1 files changed, 4 insertions, 48 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 65a341e..f472dba 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | |||
@@ -9614,61 +9614,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
9614 | 9614 | ||
9615 | #region Parcel related packets | 9615 | #region Parcel related packets |
9616 | 9616 | ||
9617 | // acumulate several HandleRegionHandleRequest consecutive overlaping requests | ||
9618 | // to be done with minimal resources as possible | ||
9619 | // variables temporary here while in test | ||
9620 | |||
9621 | Queue<UUID> RegionHandleRequests = new Queue<UUID>(); | ||
9622 | bool RegionHandleRequestsInService = false; | ||
9623 | |||
9624 | private bool HandleRegionHandleRequest(IClientAPI sender, Packet Pack) | 9617 | private bool HandleRegionHandleRequest(IClientAPI sender, Packet Pack) |
9625 | { | 9618 | { |
9626 | UUID currentUUID; | ||
9627 | |||
9628 | RegionHandleRequest handlerRegionHandleRequest = OnRegionHandleRequest; | 9619 | RegionHandleRequest handlerRegionHandleRequest = OnRegionHandleRequest; |
9629 | 9620 | ||
9630 | if (handlerRegionHandleRequest == null) | 9621 | if (handlerRegionHandleRequest != null) |
9631 | return true; | ||
9632 | |||
9633 | RegionHandleRequestPacket rhrPack = (RegionHandleRequestPacket)Pack; | ||
9634 | |||
9635 | lock (RegionHandleRequests) | ||
9636 | { | 9622 | { |
9637 | if (RegionHandleRequestsInService) | 9623 | RegionHandleRequestPacket rhrPack = (RegionHandleRequestPacket)Pack; |
9638 | { | 9624 | handlerRegionHandleRequest(this, rhrPack.RequestBlock.RegionID); |
9639 | // we are already busy doing a previus request | ||
9640 | // so enqueue it | ||
9641 | RegionHandleRequests.Enqueue(rhrPack.RequestBlock.RegionID); | ||
9642 | return true; | ||
9643 | } | ||
9644 | |||
9645 | // else do it | ||
9646 | currentUUID = rhrPack.RequestBlock.RegionID; | ||
9647 | RegionHandleRequestsInService = true; | ||
9648 | } | 9625 | } |
9649 | 9626 | ||
9650 | while (true) | 9627 | return true; |
9651 | { | ||
9652 | handlerRegionHandleRequest(this, currentUUID); | ||
9653 | |||
9654 | lock (RegionHandleRequests) | ||
9655 | { | ||
9656 | // exit condition, nothing to do or closed | ||
9657 | // current code seems to assume we may loose the handler at anytime, | ||
9658 | // so keep checking it | ||
9659 | handlerRegionHandleRequest = OnRegionHandleRequest; | ||
9660 | |||
9661 | if (RegionHandleRequests.Count == 0 || !IsActive || handlerRegionHandleRequest == null) | ||
9662 | { | ||
9663 | RegionHandleRequests.Clear(); | ||
9664 | RegionHandleRequestsInService = false; | ||
9665 | return true; | ||
9666 | } | ||
9667 | currentUUID = RegionHandleRequests.Dequeue(); | ||
9668 | } | ||
9669 | } | ||
9670 | |||
9671 | return true; // actually unreached | ||
9672 | } | 9628 | } |
9673 | 9629 | ||
9674 | private bool HandleParcelInfoRequest(IClientAPI sender, Packet Pack) | 9630 | private bool HandleParcelInfoRequest(IClientAPI sender, Packet Pack) |