aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs')
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs47
1 files changed, 27 insertions, 20 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
index 660e9a3..5288cd3 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
@@ -27,6 +27,7 @@
27 27
28using System; 28using System;
29using System.IO; 29using System.IO;
30using System.Diagnostics; //for [DebuggerNonUserCode]
30using System.Runtime.Remoting; 31using System.Runtime.Remoting;
31using System.Runtime.Remoting.Lifetime; 32using System.Runtime.Remoting.Lifetime;
32using System.Threading; 33using System.Threading;
@@ -55,7 +56,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
55{ 56{
56 public class ScriptInstance : MarshalByRefObject, IScriptInstance 57 public class ScriptInstance : MarshalByRefObject, IScriptInstance
57 { 58 {
58 // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 59 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
59 60
60 private IScriptEngine m_Engine; 61 private IScriptEngine m_Engine;
61 private IScriptWorkItem m_CurrentResult = null; 62 private IScriptWorkItem m_CurrentResult = null;
@@ -238,13 +239,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
238 239
239 if (part != null) 240 if (part != null)
240 { 241 {
241 lock (part.TaskInventory) 242 part.TaskInventory.LockItemsForRead(true);
243 if (part.TaskInventory.ContainsKey(m_ItemID))
242 { 244 {
243 if (part.TaskInventory.ContainsKey(m_ItemID)) 245 m_thisScriptTask = part.TaskInventory[m_ItemID];
244 {
245 m_thisScriptTask = part.TaskInventory[m_ItemID];
246 }
247 } 246 }
247 part.TaskInventory.LockItemsForRead(false);
248 } 248 }
249 249
250 ApiManager am = new ApiManager(); 250 ApiManager am = new ApiManager();
@@ -271,9 +271,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
271 //RemotingServices.GetLifetimeService(m_Script as ScriptBaseClass); 271 //RemotingServices.GetLifetimeService(m_Script as ScriptBaseClass);
272// lease.Register(this); 272// lease.Register(this);
273 } 273 }
274 catch (Exception) 274 catch (Exception e)
275 { 275 {
276 // m_log.ErrorFormat("[Script] Error loading assembly {0}\n"+e.ToString(), assembly); 276 m_log.ErrorFormat("[Script] Error loading assembly {0}\n"+e.ToString(), assembly);
277 throw;
277 } 278 }
278 279
279 try 280 try
@@ -431,14 +432,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
431 { 432 {
432 int permsMask; 433 int permsMask;
433 UUID permsGranter; 434 UUID permsGranter;
434 lock (part.TaskInventory) 435 part.TaskInventory.LockItemsForRead(true);
436 if (!part.TaskInventory.ContainsKey(m_ItemID))
435 { 437 {
436 if (!part.TaskInventory.ContainsKey(m_ItemID)) 438 part.TaskInventory.LockItemsForRead(false);
437 return; 439 return;
438
439 permsGranter = part.TaskInventory[m_ItemID].PermsGranter;
440 permsMask = part.TaskInventory[m_ItemID].PermsMask;
441 } 440 }
441 permsGranter = part.TaskInventory[m_ItemID].PermsGranter;
442 permsMask = part.TaskInventory[m_ItemID].PermsMask;
443 part.TaskInventory.LockItemsForRead(false);
442 444
443 if ((permsMask & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) != 0) 445 if ((permsMask & ScriptBaseClass.PERMISSION_TAKE_CONTROLS) != 0)
444 { 446 {
@@ -547,6 +549,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
547 return true; 549 return true;
548 } 550 }
549 551
552 [DebuggerNonUserCode] //Prevents the debugger from farting in this function
550 public void SetState(string state) 553 public void SetState(string state)
551 { 554 {
552 if (state == State) 555 if (state == State)
@@ -558,7 +561,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
558 new DetectParams[0])); 561 new DetectParams[0]));
559 PostEvent(new EventParams("state_entry", new Object[0], 562 PostEvent(new EventParams("state_entry", new Object[0],
560 new DetectParams[0])); 563 new DetectParams[0]));
561 564
562 throw new EventAbortException(); 565 throw new EventAbortException();
563 } 566 }
564 567
@@ -641,14 +644,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
641 /// <returns></returns> 644 /// <returns></returns>
642 public object EventProcessor() 645 public object EventProcessor()
643 { 646 {
644 if (m_Suspended) 647 EventParams data = null;
645 return 0;
646 648
647 lock (m_Script) 649 lock (m_EventQueue)
648 { 650 {
649 EventParams data = null; 651 if (m_Suspended)
652 return 0;
650 653
651 lock (m_EventQueue) 654 lock (m_Script)
652 { 655 {
653 data = (EventParams) m_EventQueue.Dequeue(); 656 data = (EventParams) m_EventQueue.Dequeue();
654 if (data == null) // Shouldn't happen 657 if (data == null) // Shouldn't happen
@@ -674,6 +677,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
674 if (data.EventName == "collision") 677 if (data.EventName == "collision")
675 m_CollisionInQueue = false; 678 m_CollisionInQueue = false;
676 } 679 }
680 }
681 lock(m_Script)
682 {
677 683
678 //m_log.DebugFormat("[XENGINE]: Processing event {0} for {1}", data.EventName, this); 684 //m_log.DebugFormat("[XENGINE]: Processing event {0} for {1}", data.EventName, this);
679 685
@@ -830,6 +836,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
830 new Object[0], new DetectParams[0])); 836 new Object[0], new DetectParams[0]));
831 } 837 }
832 838
839 [DebuggerNonUserCode] //Stops the VS debugger from farting in this function
833 public void ApiResetScript() 840 public void ApiResetScript()
834 { 841 {
835 // bool running = Running; 842 // bool running = Running;