diff options
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Region/ScriptEngine/XMREngine/XMREngine.cs | 32 | ||||
-rw-r--r-- | OpenSim/Region/ScriptEngine/XMREngine/XMRScriptThread.cs | 3 |
2 files changed, 23 insertions, 12 deletions
diff --git a/OpenSim/Region/ScriptEngine/XMREngine/XMREngine.cs b/OpenSim/Region/ScriptEngine/XMREngine/XMREngine.cs index 5889451..51c7618 100644 --- a/OpenSim/Region/ScriptEngine/XMREngine/XMREngine.cs +++ b/OpenSim/Region/ScriptEngine/XMREngine/XMREngine.cs | |||
@@ -682,25 +682,33 @@ namespace OpenSim.Region.ScriptEngine.XMREngine | |||
682 | * one to finish (ie, script gets to CheckRun() call). | 682 | * one to finish (ie, script gets to CheckRun() call). |
683 | */ | 683 | */ |
684 | m_Exiting = true; | 684 | m_Exiting = true; |
685 | for (int i = 0; i < numThreadScriptWorkers; i ++) { | 685 | for (int i = 0; i < numThreadScriptWorkers; i ++) |
686 | { | ||
686 | XMRScriptThread scriptThread = m_ScriptThreads[i]; | 687 | XMRScriptThread scriptThread = m_ScriptThreads[i]; |
687 | if (scriptThread != null) { | 688 | if (scriptThread != null) |
689 | { | ||
688 | scriptThread.Terminate(); | 690 | scriptThread.Terminate(); |
689 | m_ScriptThreads[i] = null; | 691 | m_ScriptThreads[i] = null; |
690 | } | 692 | } |
691 | } | 693 | } |
692 | if (m_SleepThread != null) { | 694 | |
693 | lock (m_SleepQueue) { | 695 | if (m_SleepThread != null) |
696 | { | ||
697 | lock (m_SleepQueue) | ||
698 | { | ||
694 | Monitor.PulseAll (m_SleepQueue); | 699 | Monitor.PulseAll (m_SleepQueue); |
695 | } | 700 | } |
696 | m_SleepThread.Join(); | 701 | if(!m_SleepThread.Join(250)) |
702 | m_SleepThread.Abort(); | ||
697 | m_SleepThread = null; | 703 | m_SleepThread = null; |
698 | } | 704 | } |
699 | if (m_SliceThread != null) { | 705 | /* |
706 | if (m_SliceThread != null) | ||
707 | { | ||
700 | m_SliceThread.Join(); | 708 | m_SliceThread.Join(); |
701 | m_SliceThread = null; | 709 | m_SliceThread = null; |
702 | } | 710 | } |
703 | 711 | */ | |
704 | m_Scene.EventManager.OnFrame -= OnFrame; | 712 | m_Scene.EventManager.OnFrame -= OnFrame; |
705 | m_Scene.EventManager.OnRezScript -= OnRezScript; | 713 | m_Scene.EventManager.OnRezScript -= OnRezScript; |
706 | m_Scene.EventManager.OnRemoveScript -= OnRemoveScript; | 714 | m_Scene.EventManager.OnRemoveScript -= OnRemoveScript; |
@@ -1759,29 +1767,30 @@ namespace OpenSim.Region.ScriptEngine.XMREngine | |||
1759 | /** | 1767 | /** |
1760 | * @brief Thread that runs a time slicer. | 1768 | * @brief Thread that runs a time slicer. |
1761 | */ | 1769 | */ |
1770 | /* | ||
1762 | private void RunSliceThread() | 1771 | private void RunSliceThread() |
1763 | { | 1772 | { |
1764 | int ms = m_Config.GetInt ("TimeSlice", 50); | 1773 | int ms = m_Config.GetInt ("TimeSlice", 50); |
1765 | while (!m_Exiting) { | 1774 | while (!m_Exiting) { |
1766 | UpdateMyThread (); | 1775 | UpdateMyThread (); |
1767 | 1776 | */ | |
1768 | /* | 1777 | /* |
1769 | * Let script run for a little bit. | 1778 | * Let script run for a little bit. |
1770 | */ | 1779 | */ |
1771 | System.Threading.Thread.Sleep (ms); | 1780 | // System.Threading.Thread.Sleep (ms); |
1772 | 1781 | ||
1773 | /* | 1782 | /* |
1774 | * If some script is running, flag it to suspend | 1783 | * If some script is running, flag it to suspend |
1775 | * next time it calls CheckRun(). | 1784 | * next time it calls CheckRun(). |
1776 | */ | 1785 | */ |
1777 | for (int i = 0; i < numThreadScriptWorkers; i ++) { | 1786 | /* for (int i = 0; i < numThreadScriptWorkers; i ++) { |
1778 | XMRScriptThread st = m_ScriptThreads[i]; | 1787 | XMRScriptThread st = m_ScriptThreads[i]; |
1779 | if (st != null) st.TimeSlice(); | 1788 | if (st != null) st.TimeSlice(); |
1780 | } | 1789 | } |
1781 | } | 1790 | } |
1782 | MyThreadExiting (); | 1791 | MyThreadExiting (); |
1783 | } | 1792 | } |
1784 | 1793 | */ | |
1785 | public void Suspend(UUID itemID, int ms) | 1794 | public void Suspend(UUID itemID, int ms) |
1786 | { | 1795 | { |
1787 | XMRInstance instance = GetInstance (itemID); | 1796 | XMRInstance instance = GetInstance (itemID); |
@@ -1960,6 +1969,7 @@ namespace OpenSim.Region.ScriptEngine.XMREngine | |||
1960 | Thread thread = new Thread (start); | 1969 | Thread thread = new Thread (start); |
1961 | thread.Name = name; | 1970 | thread.Name = name; |
1962 | thread.Priority = priority; | 1971 | thread.Priority = priority; |
1972 | thread.IsBackground = true; | ||
1963 | thread.Start (); | 1973 | thread.Start (); |
1964 | 1974 | ||
1965 | Watchdog.ThreadWatchdogInfo info = new Watchdog.ThreadWatchdogInfo (thread, Watchdog.DEFAULT_WATCHDOG_TIMEOUT_MS, name); | 1975 | Watchdog.ThreadWatchdogInfo info = new Watchdog.ThreadWatchdogInfo (thread, Watchdog.DEFAULT_WATCHDOG_TIMEOUT_MS, name); |
diff --git a/OpenSim/Region/ScriptEngine/XMREngine/XMRScriptThread.cs b/OpenSim/Region/ScriptEngine/XMREngine/XMRScriptThread.cs index a1238db..ddb3698 100644 --- a/OpenSim/Region/ScriptEngine/XMREngine/XMRScriptThread.cs +++ b/OpenSim/Region/ScriptEngine/XMREngine/XMRScriptThread.cs | |||
@@ -105,7 +105,8 @@ namespace OpenSim.Region.ScriptEngine.XMREngine | |||
105 | { | 105 | { |
106 | m_Exiting = true; | 106 | m_Exiting = true; |
107 | WakeUpScriptThread(); | 107 | WakeUpScriptThread(); |
108 | thd.Join(); | 108 | if(!thd.Join(250)) |
109 | thd.Abort(); | ||
109 | lock (m_AllThreads) | 110 | lock (m_AllThreads) |
110 | m_AllThreads.Remove (thd); | 111 | m_AllThreads.Remove (thd); |
111 | 112 | ||