aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine/XEngine/XEngine.cs')
-rw-r--r--OpenSim/Region/ScriptEngine/XEngine/XEngine.cs93
1 files changed, 45 insertions, 48 deletions
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
index f9f8883..8ad8110 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
@@ -145,11 +145,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine
145 public void Initialise(Scene scene, IConfigSource configSource) 145 public void Initialise(Scene scene, IConfigSource configSource)
146 { 146 {
147 AppDomain.CurrentDomain.AssemblyResolve += 147 AppDomain.CurrentDomain.AssemblyResolve +=
148 OnAssemblyResolve; 148 OnAssemblyResolve;
149 149
150 m_log.InfoFormat("[XEngine] Initializing scripts in region {0}", 150 m_log.InfoFormat("[XEngine] Initializing scripts in region {0}",
151 scene.RegionInfo.RegionName); 151 scene.RegionInfo.RegionName);
152 m_Scene=scene; 152 m_Scene = scene;
153 153
154 m_ScriptConfig = configSource.Configs["XEngine"]; 154 m_ScriptConfig = configSource.Configs["XEngine"];
155 155
@@ -165,34 +165,31 @@ namespace OpenSim.Region.ScriptEngine.XEngine
165 string priority = m_ScriptConfig.GetString("Priority", "BelowNormal"); 165 string priority = m_ScriptConfig.GetString("Priority", "BelowNormal");
166 int maxScriptQueue = m_ScriptConfig.GetInt("MaxScriptEventQueue",300); 166 int maxScriptQueue = m_ScriptConfig.GetInt("MaxScriptEventQueue",300);
167 int stackSize = m_ScriptConfig.GetInt("ThreadStackSize", 262144); 167 int stackSize = m_ScriptConfig.GetInt("ThreadStackSize", 262144);
168 int sleepTime = m_ScriptConfig.GetInt("MaintenanceInterval", 168 int sleepTime = m_ScriptConfig.GetInt("MaintenanceInterval", 10)*1000;
169 10)*1000;
170 m_EventLimit = m_ScriptConfig.GetInt("EventLimit", 30); 169 m_EventLimit = m_ScriptConfig.GetInt("EventLimit", 30);
171 m_KillTimedOutScripts = m_ScriptConfig.GetBoolean( 170 m_KillTimedOutScripts = m_ScriptConfig.GetBoolean("KillTimedOutScripts", false);
172 "KillTimedOutScripts", false);
173 int saveTime = m_ScriptConfig.GetInt("SaveInterval", 300)*1000; 171 int saveTime = m_ScriptConfig.GetInt("SaveInterval", 300)*1000;
174 172
175 ThreadPriority prio = ThreadPriority.BelowNormal; 173 ThreadPriority prio = ThreadPriority.BelowNormal;
176 switch (priority) 174 switch (priority)
177 { 175 {
178 case "Lowest": 176 case "Lowest":
179 prio=ThreadPriority.Lowest; 177 prio = ThreadPriority.Lowest;
180 break; 178 break;
181 case "BelowNormal": 179 case "BelowNormal":
182 prio=ThreadPriority.BelowNormal; 180 prio = ThreadPriority.BelowNormal;
183 break; 181 break;
184 case "Normal": 182 case "Normal":
185 prio=ThreadPriority.Normal; 183 prio = ThreadPriority.Normal;
186 break; 184 break;
187 case "AboveNormal": 185 case "AboveNormal":
188 prio=ThreadPriority.AboveNormal; 186 prio = ThreadPriority.AboveNormal;
189 break; 187 break;
190 case "Highest": 188 case "Highest":
191 prio=ThreadPriority.Highest; 189 prio = ThreadPriority.Highest;
192 break; 190 break;
193 default: 191 default:
194 m_log.ErrorFormat("[XEngine] Invalid thread priority: '"+ 192 m_log.ErrorFormat("[XEngine] Invalid thread priority: '{0}'. Assuming BelowNormal", priority);
195 priority+"'. Assuming BelowNormal");
196 break; 193 break;
197 } 194 }
198 195
@@ -204,7 +201,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
204 m_EventManager = new EventManager(this); 201 m_EventManager = new EventManager(this);
205 202
206 StartEngine(minThreads, maxThreads, idleTimeout, prio, 203 StartEngine(minThreads, maxThreads, idleTimeout, prio,
207 maxScriptQueue, stackSize); 204 maxScriptQueue, stackSize);
208 205
209 m_Compiler = new Compiler(this); 206 m_Compiler = new Compiler(this);
210 207
@@ -218,15 +215,14 @@ namespace OpenSim.Region.ScriptEngine.XEngine
218 215
219 if (sleepTime > 0) 216 if (sleepTime > 0)
220 { 217 {
221 m_ThreadPool.QueueWorkItem(new WorkItemCallback( 218 m_ThreadPool.QueueWorkItem(new WorkItemCallback(this.DoMaintenance),
222 this.DoMaintenance), new Object[] 219 new Object[]{ sleepTime });
223 { sleepTime });
224 } 220 }
225 221
226 if (saveTime > 0) 222 if (saveTime > 0)
227 { 223 {
228 m_ThreadPool.QueueWorkItem(new WorkItemCallback( 224 m_ThreadPool.QueueWorkItem(new WorkItemCallback(this.DoBackup),
229 this.DoBackup), new Object[] { saveTime }); 225 new Object[] { saveTime });
230 } 226 }
231 227
232 scene.RegisterModuleInterface<IScriptModule>(this); 228 scene.RegisterModuleInterface<IScriptModule>(this);
@@ -279,8 +275,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
279 275
280 instances.Clear(); 276 instances.Clear();
281 277
282 m_ThreadPool.QueueWorkItem(new WorkItemCallback( 278 m_ThreadPool.QueueWorkItem(new WorkItemCallback(this.DoBackup),
283 this.DoBackup), new Object[] { saveTime }); 279 new Object[] { saveTime });
284 280
285 return 0; 281 return 0;
286 } 282 }
@@ -302,9 +298,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
302 298
303 System.Threading.Thread.Sleep(sleepTime); 299 System.Threading.Thread.Sleep(sleepTime);
304 300
305 m_ThreadPool.QueueWorkItem(new WorkItemCallback( 301 m_ThreadPool.QueueWorkItem(new WorkItemCallback(this.DoMaintenance),
306 this.DoMaintenance), new Object[] 302 new Object[]{ sleepTime });
307 { sleepTime });
308 303
309 return 0; 304 return 0;
310 } 305 }
@@ -321,25 +316,26 @@ namespace OpenSim.Region.ScriptEngine.XEngine
321 316
322 public void OnRezScript(uint localID, LLUUID itemID, string script, int startParam, bool postOnRez) 317 public void OnRezScript(uint localID, LLUUID itemID, string script, int startParam, bool postOnRez)
323 { 318 {
324 Object[] parms = new Object[] 319 Object[] parms = new Object[]{localID, itemID, script, startParam, postOnRez};
325 { localID, itemID, script, startParam, postOnRez};
326 320
327 lock (m_CompileQueue) 321 lock (m_CompileQueue)
328 { 322 {
329 m_CompileQueue.Enqueue(parms); 323 m_CompileQueue.Enqueue(parms);
324
330 if (m_CurrentCompile == null) 325 if (m_CurrentCompile == null)
331 { 326 {
332 if (m_firstStart) 327 if (m_firstStart)
333 { 328 {
334 m_firstStart = false; 329 m_firstStart = false;
335 m_CurrentCompile = m_ThreadPool.QueueWorkItem( 330 m_CurrentCompile = m_ThreadPool.QueueWorkItem(
336 new WorkItemCallback( 331 new WorkItemCallback(this.DoScriptWait),
337 this.DoScriptWait), new Object[0]); 332 new Object[0]);
338 return; 333 return;
339 } 334 }
335
340 m_CurrentCompile = m_ThreadPool.QueueWorkItem( 336 m_CurrentCompile = m_ThreadPool.QueueWorkItem(
341 new WorkItemCallback( 337 new WorkItemCallback(this.DoOnRezScriptQueue),
342 this.DoOnRezScriptQueue), new Object[0]); 338 new Object[0]);
343 } 339 }
344 } 340 }
345 } 341 }
@@ -353,8 +349,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
353 if (m_CompileQueue.Count > 0) 349 if (m_CompileQueue.Count > 0)
354 { 350 {
355 m_CurrentCompile = m_ThreadPool.QueueWorkItem( 351 m_CurrentCompile = m_ThreadPool.QueueWorkItem(
356 new WorkItemCallback( 352 new WorkItemCallback(this.DoOnRezScriptQueue),
357 this.DoOnRezScriptQueue), new Object[0]); 353 new Object[0]);
358 } 354 }
359 else 355 else
360 { 356 {
@@ -384,8 +380,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
384 if (m_CompileQueue.Count > 0) 380 if (m_CompileQueue.Count > 0)
385 { 381 {
386 m_CurrentCompile = m_ThreadPool.QueueWorkItem( 382 m_CurrentCompile = m_ThreadPool.QueueWorkItem(
387 new WorkItemCallback( 383 new WorkItemCallback(this.DoOnRezScriptQueue),
388 this.DoOnRezScriptQueue), new Object[0]); 384 new Object[0]);
389 } 385 }
390 else 386 else
391 { 387 {
@@ -459,7 +455,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
459 if ((!m_Scripts.ContainsKey(itemID)) || 455 if ((!m_Scripts.ContainsKey(itemID)) ||
460 (m_Scripts[itemID].AssetID != assetID)) 456 (m_Scripts[itemID].AssetID != assetID))
461 { 457 {
462 LLUUID appDomain=assetID; 458 LLUUID appDomain = assetID;
463 459
464 if (part.ParentGroup.RootPart.IsAttachment) 460 if (part.ParentGroup.RootPart.IsAttachment)
465 appDomain = part.ParentGroup.RootPart.UUID; 461 appDomain = part.ParentGroup.RootPart.UUID;
@@ -473,8 +469,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
473// "ScriptEngines", 469// "ScriptEngines",
474// m_Scene.RegionInfo.RegionID.ToString()); 470// m_Scene.RegionInfo.RegionID.ToString());
475 471
476 Evidence baseEvidence = 472 Evidence baseEvidence = AppDomain.CurrentDomain.Evidence;
477 AppDomain.CurrentDomain.Evidence;
478 Evidence evidence = new Evidence(baseEvidence); 473 Evidence evidence = new Evidence(baseEvidence);
479 474
480 m_AppDomains[appDomain] = 475 m_AppDomains[appDomain] =
@@ -489,18 +484,19 @@ namespace OpenSim.Region.ScriptEngine.XEngine
489 } 484 }
490 catch (Exception e) 485 catch (Exception e)
491 { 486 {
492 m_log.Error("[XEngine] Exception creating app domain:\n"+e.ToString()); 487 m_log.ErrorFormat("[XEngine] Exception creating app domain:\n {0}", e.ToString());
493 return false; 488 return false;
494 } 489 }
495 } 490 }
496 m_DomainScripts[appDomain].Add(itemID); 491 m_DomainScripts[appDomain].Add(itemID);
497 492
498 ScriptInstance instance = new ScriptInstance(this,localID, 493 ScriptInstance instance =
499 part.UUID, itemID, assetID, assembly, 494 new ScriptInstance(this,localID,
500 m_AppDomains[appDomain], 495 part.UUID, itemID, assetID, assembly,
501 part.ParentGroup.RootPart.Name, 496 m_AppDomains[appDomain],
502 item.Name, startParam, postOnRez, 497 part.ParentGroup.RootPart.Name,
503 StateSource.NewRez, m_MaxScriptQueue); 498 item.Name, startParam, postOnRez,
499 StateSource.NewRez, m_MaxScriptQueue);
504 500
505 m_log.DebugFormat("[XEngine] Loaded script {0}.{1}", 501 m_log.DebugFormat("[XEngine] Loaded script {0}.{1}",
506 part.ParentGroup.RootPart.Name, item.Name); 502 part.ParentGroup.RootPart.Name, item.Name);
@@ -657,8 +653,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine
657 // 653 //
658 public IScriptWorkItem QueueEventHandler(object parms) 654 public IScriptWorkItem QueueEventHandler(object parms)
659 { 655 {
660 return new XWorkItem(m_ThreadPool.QueueWorkItem(new WorkItemCallback( 656 return new XWorkItem(m_ThreadPool.QueueWorkItem(
661 this.ProcessEventHandler), parms)); 657 new WorkItemCallback(this.ProcessEventHandler),
658 parms));
662 } 659 }
663 660
664 // 661 //
@@ -723,7 +720,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
723 string[] pathList = new string[] {"bin", "ScriptEngines", 720 string[] pathList = new string[] {"bin", "ScriptEngines",
724 Path.Combine("ScriptEngines", 721 Path.Combine("ScriptEngines",
725 m_Scene.RegionInfo.RegionID.ToString())}; 722 m_Scene.RegionInfo.RegionID.ToString())};
726 723
727 string assemblyName = args.Name; 724 string assemblyName = args.Name;
728 if (assemblyName.IndexOf(",") != -1) 725 if (assemblyName.IndexOf(",") != -1)
729 assemblyName = args.Name.Substring(0, args.Name.IndexOf(",")); 726 assemblyName = args.Name.Substring(0, args.Name.IndexOf(","));