diff options
author | Diva Canto | 2013-07-16 20:28:48 -0700 |
---|---|---|
committer | Diva Canto | 2013-07-16 20:28:48 -0700 |
commit | 894554faf61fe8ae02c1348612845ae2553efbd4 (patch) | |
tree | ffc5669180a9a46d5266f2fc0ac77de79a825a96 /OpenSim | |
parent | Improvements to the ServiceThrottleModule: added a category and an itemid to ... (diff) | |
download | opensim-SC-894554faf61fe8ae02c1348612845ae2553efbd4.zip opensim-SC-894554faf61fe8ae02c1348612845ae2553efbd4.tar.gz opensim-SC-894554faf61fe8ae02c1348612845ae2553efbd4.tar.bz2 opensim-SC-894554faf61fe8ae02c1348612845ae2553efbd4.tar.xz |
Removed the MapItems thread. Redirected the map items requests to the services throttle thread. Didn't change anything in how that processor is implemented, for better or for worse.
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Region/CoreModules/Framework/ServiceThrottle/ServiceThrottleModule.cs | 5 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs | 49 |
2 files changed, 45 insertions, 9 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/ServiceThrottle/ServiceThrottleModule.cs b/OpenSim/Region/CoreModules/Framework/ServiceThrottle/ServiceThrottleModule.cs index 1554b3e..a70261e 100644 --- a/OpenSim/Region/CoreModules/Framework/ServiceThrottle/ServiceThrottleModule.cs +++ b/OpenSim/Region/CoreModules/Framework/ServiceThrottle/ServiceThrottleModule.cs | |||
@@ -181,11 +181,10 @@ namespace OpenSim.Region.CoreModules.Framework | |||
181 | 181 | ||
182 | m_RequestQueue.Enqueue(delegate | 182 | m_RequestQueue.Enqueue(delegate |
183 | { | 183 | { |
184 | continuation(); | ||
185 | lock (m_RequestQueue) | 184 | lock (m_RequestQueue) |
186 | { | ||
187 | m_Pending[category].Remove(itemid); | 185 | m_Pending[category].Remove(itemid); |
188 | } | 186 | |
187 | continuation(); | ||
189 | }); | 188 | }); |
190 | } | 189 | } |
191 | } | 190 | } |
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs index c50ab64..a26a5f0 100644 --- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs +++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs | |||
@@ -81,6 +81,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
81 | private List<UUID> m_rootAgents = new List<UUID>(); | 81 | private List<UUID> m_rootAgents = new List<UUID>(); |
82 | private volatile bool threadrunning = false; | 82 | private volatile bool threadrunning = false; |
83 | 83 | ||
84 | private IServiceThrottleModule m_ServiceThrottle; | ||
85 | |||
84 | //private int CacheRegionsDistance = 256; | 86 | //private int CacheRegionsDistance = 256; |
85 | 87 | ||
86 | #region INonSharedRegionModule Members | 88 | #region INonSharedRegionModule Members |
@@ -131,6 +133,10 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
131 | 133 | ||
132 | public virtual void RegionLoaded (Scene scene) | 134 | public virtual void RegionLoaded (Scene scene) |
133 | { | 135 | { |
136 | if (!m_Enabled) | ||
137 | return; | ||
138 | |||
139 | m_ServiceThrottle = scene.RequestModuleInterface<IServiceThrottleModule>(); | ||
134 | } | 140 | } |
135 | 141 | ||
136 | 142 | ||
@@ -170,13 +176,13 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
170 | m_scene.EventManager.OnMakeRootAgent += MakeRootAgent; | 176 | m_scene.EventManager.OnMakeRootAgent += MakeRootAgent; |
171 | m_scene.EventManager.OnRegionUp += OnRegionUp; | 177 | m_scene.EventManager.OnRegionUp += OnRegionUp; |
172 | 178 | ||
173 | StartThread(new object()); | 179 | // StartThread(new object()); |
174 | } | 180 | } |
175 | 181 | ||
176 | // this has to be called with a lock on m_scene | 182 | // this has to be called with a lock on m_scene |
177 | protected virtual void RemoveHandlers() | 183 | protected virtual void RemoveHandlers() |
178 | { | 184 | { |
179 | StopThread(); | 185 | // StopThread(); |
180 | 186 | ||
181 | m_scene.EventManager.OnRegionUp -= OnRegionUp; | 187 | m_scene.EventManager.OnRegionUp -= OnRegionUp; |
182 | m_scene.EventManager.OnMakeRootAgent -= MakeRootAgent; | 188 | m_scene.EventManager.OnMakeRootAgent -= MakeRootAgent; |
@@ -526,7 +532,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
526 | /// </summary> | 532 | /// </summary> |
527 | public void process() | 533 | public void process() |
528 | { | 534 | { |
529 | const int MAX_ASYNC_REQUESTS = 20; | 535 | //const int MAX_ASYNC_REQUESTS = 20; |
530 | try | 536 | try |
531 | { | 537 | { |
532 | while (true) | 538 | while (true) |
@@ -571,13 +577,44 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
571 | Watchdog.RemoveThread(); | 577 | Watchdog.RemoveThread(); |
572 | } | 578 | } |
573 | 579 | ||
580 | const int MAX_ASYNC_REQUESTS = 20; | ||
581 | |||
574 | /// <summary> | 582 | /// <summary> |
575 | /// Enqueues the map item request into the processing thread | 583 | /// Enqueues the map item request into the services throttle processing thread |
576 | /// </summary> | 584 | /// </summary> |
577 | /// <param name="state"></param> | 585 | /// <param name="state"></param> |
578 | public void EnqueueMapItemRequest(MapRequestState state) | 586 | public void EnqueueMapItemRequest(MapRequestState st) |
579 | { | 587 | { |
580 | requests.Enqueue(state); | 588 | |
589 | m_ServiceThrottle.Enqueue("map-item", st.regionhandle.ToString() + st.agentID.ToString(), delegate | ||
590 | { | ||
591 | if (st.agentID != UUID.Zero) | ||
592 | { | ||
593 | bool dorequest = true; | ||
594 | lock (m_rootAgents) | ||
595 | { | ||
596 | if (!m_rootAgents.Contains(st.agentID)) | ||
597 | dorequest = false; | ||
598 | } | ||
599 | |||
600 | if (dorequest && !m_blacklistedregions.ContainsKey(st.regionhandle)) | ||
601 | { | ||
602 | if (nAsyncRequests >= MAX_ASYNC_REQUESTS) // hit the break | ||
603 | { | ||
604 | // AH!!! Recursive ! | ||
605 | // Put this request back in the queue and return | ||
606 | EnqueueMapItemRequest(st); | ||
607 | return; | ||
608 | } | ||
609 | |||
610 | RequestMapItemsDelegate d = RequestMapItemsAsync; | ||
611 | d.BeginInvoke(st.agentID, st.flags, st.EstateID, st.godlike, st.itemtype, st.regionhandle, RequestMapItemsCompleted, null); | ||
612 | //OSDMap response = RequestMapItemsAsync(st.agentID, st.flags, st.EstateID, st.godlike, st.itemtype, st.regionhandle); | ||
613 | //RequestMapItemsCompleted(response); | ||
614 | Interlocked.Increment(ref nAsyncRequests); | ||
615 | } | ||
616 | } | ||
617 | }); | ||
581 | } | 618 | } |
582 | 619 | ||
583 | /// <summary> | 620 | /// <summary> |