Added some error checking to MaintenanceThread, no-crash (just log) loading of script engines, and support to load multiple script engines
parent
694642a482
commit
34d21ac94b
|
@ -455,7 +455,19 @@ namespace OpenSim
|
||||||
//m_moduleLoader.PickupModules(scene, "ScriptEngines");
|
//m_moduleLoader.PickupModules(scene, "ScriptEngines");
|
||||||
//m_moduleLoader.LoadRegionModules(Path.Combine("ScriptEngines", m_scriptEngine), scene);
|
//m_moduleLoader.LoadRegionModules(Path.Combine("ScriptEngines", m_scriptEngine), scene);
|
||||||
MainLog.Instance.Verbose("MODULES", "Loading scripting engine modules");
|
MainLog.Instance.Verbose("MODULES", "Loading scripting engine modules");
|
||||||
m_moduleLoader.LoadRegionModules(Path.Combine("ScriptEngines", m_scriptEngine), scene);
|
foreach (string module in m_scriptEngine.Split(';'))
|
||||||
|
{
|
||||||
|
string mod = module.Trim(" \t\r\n".ToCharArray()); // Clean up name
|
||||||
|
MainLog.Instance.Verbose("MODULES", "Loading scripting engine: " + mod);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
m_moduleLoader.LoadRegionModules(Path.Combine("ScriptEngines", mod), scene);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
MainLog.Instance.Error("MODULES", "Failed to load script engine: " + ex.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m_moduleLoader.InitialiseSharedModules(scene);
|
m_moduleLoader.InitialiseSharedModules(scene);
|
||||||
scene.SetModuleInterfaces();
|
scene.SetModuleInterfaces();
|
||||||
|
|
|
@ -95,40 +95,44 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
||||||
System.Threading.Thread.Sleep(MaintenanceLoopms); // Sleep before next pass
|
System.Threading.Thread.Sleep(MaintenanceLoopms); // Sleep before next pass
|
||||||
if (PleaseShutdown)
|
if (PleaseShutdown)
|
||||||
return;
|
return;
|
||||||
//
|
|
||||||
// Re-reading config every x seconds
|
|
||||||
//
|
|
||||||
if (m_ScriptEngine.RefreshConfigFileSeconds > 0)
|
|
||||||
{
|
|
||||||
// Check if its time to re-read config
|
|
||||||
if (DateTime.Now.Ticks - Last_ReReadConfigFilens > m_ScriptEngine.RefreshConfigFilens)
|
|
||||||
{
|
|
||||||
// Its time to re-read config file
|
|
||||||
m_ScriptEngine.ConfigSource.Reload(); // Refresh config
|
|
||||||
m_ScriptEngine.ReadConfig();
|
|
||||||
Last_ReReadConfigFilens = DateTime.Now.Ticks; // Reset time
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
if (m_ScriptEngine != null)
|
||||||
// Adjust number of running script threads if not correct
|
|
||||||
//
|
|
||||||
m_ScriptEngine.m_EventQueueManager.AdjustNumberOfScriptThreads();
|
|
||||||
|
|
||||||
//
|
|
||||||
// Check if any script has exceeded its max execution time
|
|
||||||
//
|
|
||||||
if (m_ScriptEngine.m_EventQueueManager.EnforceMaxExecutionTime)
|
|
||||||
{
|
{
|
||||||
// We are enforcing execution time
|
//
|
||||||
if (DateTime.Now.Ticks - Last_maxFunctionExecutionTimens >
|
// Re-reading config every x seconds
|
||||||
m_ScriptEngine.m_EventQueueManager.maxFunctionExecutionTimens)
|
//
|
||||||
|
if (m_ScriptEngine.RefreshConfigFileSeconds > 0)
|
||||||
{
|
{
|
||||||
// Its time to check again
|
// Check if its time to re-read config
|
||||||
m_ScriptEngine.m_EventQueueManager.CheckScriptMaxExecTime(); // Do check
|
if (DateTime.Now.Ticks - Last_ReReadConfigFilens > m_ScriptEngine.RefreshConfigFilens)
|
||||||
Last_maxFunctionExecutionTimens = DateTime.Now.Ticks; // Reset time
|
{
|
||||||
|
// Its time to re-read config file
|
||||||
|
m_ScriptEngine.ReadConfig();
|
||||||
|
Last_ReReadConfigFilens = DateTime.Now.Ticks; // Reset time
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
//
|
||||||
|
// Adjust number of running script threads if not correct
|
||||||
|
//
|
||||||
|
if (m_ScriptEngine.m_EventQueueManager != null)
|
||||||
|
m_ScriptEngine.m_EventQueueManager.AdjustNumberOfScriptThreads();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check if any script has exceeded its max execution time
|
||||||
|
//
|
||||||
|
if (m_ScriptEngine.m_EventQueueManager != null && m_ScriptEngine.m_EventQueueManager.EnforceMaxExecutionTime)
|
||||||
|
{
|
||||||
|
// We are enforcing execution time
|
||||||
|
if (DateTime.Now.Ticks - Last_maxFunctionExecutionTimens >
|
||||||
|
m_ScriptEngine.m_EventQueueManager.maxFunctionExecutionTimens)
|
||||||
|
{
|
||||||
|
// Its time to check again
|
||||||
|
m_ScriptEngine.m_EventQueueManager.CheckScriptMaxExecTime(); // Do check
|
||||||
|
Last_maxFunctionExecutionTimens = DateTime.Now.Ticks; // Reset time
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} // m_ScriptEngine != null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|
|
@ -51,11 +51,6 @@ asset_database = "sqlite"
|
||||||
|
|
||||||
verbose = true
|
verbose = true
|
||||||
|
|
||||||
; ScriptEngine
|
|
||||||
script_engine = OpenSim.Region.ScriptEngine.DotNetEngine.dll
|
|
||||||
;Experimental remote ScriptServer plugin:
|
|
||||||
;script_engine = OpenSim.Region.ScriptEngine.RemoteServer.dll
|
|
||||||
|
|
||||||
|
|
||||||
; if you would like to allow prim to be physical and move by physics with the physical checkbox in the client set this to true.
|
; if you would like to allow prim to be physical and move by physics with the physical checkbox in the client set this to true.
|
||||||
physical_prim = true
|
physical_prim = true
|
||||||
|
@ -115,7 +110,29 @@ shout_distance = 100
|
||||||
; make for smoother sun transition at the cost of network
|
; make for smoother sun transition at the cost of network
|
||||||
;frame_rate = 100
|
;frame_rate = 100
|
||||||
|
|
||||||
|
|
||||||
|
; ##
|
||||||
|
; ## ScriptEngine
|
||||||
|
; ##
|
||||||
|
; These are region modules loaded into each region to provide script support
|
||||||
|
; Scripts may be everything from LSL or C# scripts put in prims to whole game systems that controls the whole grid.
|
||||||
|
; You can load multiple modules by separating them with ;.
|
||||||
|
;
|
||||||
|
; Example:
|
||||||
|
;script_engine = OpenSim.Region.ScriptEngine.DotNetEngine.dll;OpenSim.Region.ScriptEngine.RemoteServer.dll
|
||||||
|
;
|
||||||
|
; This is the current and most stable ScriptEngine:
|
||||||
|
script_engine = OpenSim.Region.ScriptEngine.DotNetEngine.dll
|
||||||
|
|
||||||
|
;Experimental remote ScriptServer plugin (does not currently work):
|
||||||
|
;script_engine = OpenSim.Region.ScriptEngine.RemoteServer.dll
|
||||||
|
|
||||||
|
|
||||||
[ScriptEngine.DotNetEngine]
|
[ScriptEngine.DotNetEngine]
|
||||||
|
;
|
||||||
|
; These settings are specific to DotNetEngine script engine
|
||||||
|
; Other script engines based on OpenSim.Region.ScriptEngine.Common.dll will have almost identical settings, but in another section of this config file.
|
||||||
|
;
|
||||||
|
|
||||||
; When a script receives an event the event is queued.
|
; When a script receives an event the event is queued.
|
||||||
; Any free thread will start executing this event. One script can only have one event executed simultaneously.
|
; Any free thread will start executing this event. One script can only have one event executed simultaneously.
|
||||||
|
|
Loading…
Reference in New Issue