aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
authorDiva Canto2013-07-16 20:28:48 -0700
committerDiva Canto2013-07-16 20:28:48 -0700
commit894554faf61fe8ae02c1348612845ae2553efbd4 (patch)
treeffc5669180a9a46d5266f2fc0ac77de79a825a96 /OpenSim
parentImprovements to the ServiceThrottleModule: added a category and an itemid to ... (diff)
downloadopensim-SC_OLD-894554faf61fe8ae02c1348612845ae2553efbd4.zip
opensim-SC_OLD-894554faf61fe8ae02c1348612845ae2553efbd4.tar.gz
opensim-SC_OLD-894554faf61fe8ae02c1348612845ae2553efbd4.tar.bz2
opensim-SC_OLD-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.cs5
-rw-r--r--OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs49
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>