aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Framework')
-rw-r--r--OpenSim/Framework/IScene.cs4
-rw-r--r--OpenSim/Framework/Util.cs45
2 files changed, 30 insertions, 19 deletions
diff --git a/OpenSim/Framework/IScene.cs b/OpenSim/Framework/IScene.cs
index 6919c48..e0e023d 100644
--- a/OpenSim/Framework/IScene.cs
+++ b/OpenSim/Framework/IScene.cs
@@ -74,9 +74,7 @@ namespace OpenSim.Framework
74 /// <param name="client"></param> 74 /// <param name="client"></param>
75 /// <param name="type">The type of agent to add.</param> 75 /// <param name="type">The type of agent to add.</param>
76 /// <returns> 76 /// <returns>
77 /// The scene agent if the new client was added. 77 /// The scene agent if the new client was added or if an agent that already existed.</returns>
78 /// Null if the required scene agent already existed or no scene agent was added because the required client circuit doesn't exist.
79 /// </returns>
80 ISceneAgent AddNewClient(IClientAPI client, PresenceType type); 78 ISceneAgent AddNewClient(IClientAPI client, PresenceType type);
81 79
82 /// <summary> 80 /// <summary>
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs
index 0b2fbb9..fae6802 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -58,10 +58,12 @@ namespace OpenSim.Framework
58 /// <remarks> 58 /// <remarks>
59 /// None is used to execute the method in the same thread that made the call. It should only be used by regression 59 /// None is used to execute the method in the same thread that made the call. It should only be used by regression
60 /// test code that relies on predictable event ordering. 60 /// test code that relies on predictable event ordering.
61 /// RegressionTest is used by regression tests. It fires the call synchronously and does not catch any exceptions.
61 /// </remarks> 62 /// </remarks>
62 public enum FireAndForgetMethod 63 public enum FireAndForgetMethod
63 { 64 {
64 None, 65 None,
66 RegressionTest,
65 UnsafeQueueUserWorkItem, 67 UnsafeQueueUserWorkItem,
66 QueueUserWorkItem, 68 QueueUserWorkItem,
67 BeginInvoke, 69 BeginInvoke,
@@ -1556,27 +1558,38 @@ namespace OpenSim.Framework
1556 1558
1557 public static void FireAndForget(System.Threading.WaitCallback callback, object obj) 1559 public static void FireAndForget(System.Threading.WaitCallback callback, object obj)
1558 { 1560 {
1559 // When OpenSim interacts with a database or sends data over the wire, it must send this in en_US culture 1561 WaitCallback realCallback;
1560 // so that we don't encounter problems where, for instance, data is saved with a culture that uses commas
1561 // for decimals places but is read by a culture that treats commas as number seperators.
1562 WaitCallback realCallback = delegate(object o)
1563 {
1564 Culture.SetCurrentCulture();
1565 1562
1566 try 1563 if (FireAndForgetMethod == FireAndForgetMethod.RegressionTest)
1567 { 1564 {
1568 callback(o); 1565 // If we're running regression tests, then we want any exceptions to rise up to the test code.
1569 } 1566 realCallback = o => { Culture.SetCurrentCulture(); callback(o); };
1570 catch (Exception e) 1567 }
1568 else
1569 {
1570 // When OpenSim interacts with a database or sends data over the wire, it must send this in en_US culture
1571 // so that we don't encounter problems where, for instance, data is saved with a culture that uses commas
1572 // for decimals places but is read by a culture that treats commas as number seperators.
1573 realCallback = o =>
1571 { 1574 {
1572 m_log.ErrorFormat( 1575 Culture.SetCurrentCulture();
1573 "[UTIL]: Continuing after async_call_method thread terminated with exception {0}{1}", 1576
1574 e.Message, e.StackTrace); 1577 try
1575 } 1578 {
1576 }; 1579 callback(o);
1580 }
1581 catch (Exception e)
1582 {
1583 m_log.ErrorFormat(
1584 "[UTIL]: Continuing after async_call_method thread terminated with exception {0}{1}",
1585 e.Message, e.StackTrace);
1586 }
1587 };
1588 }
1577 1589
1578 switch (FireAndForgetMethod) 1590 switch (FireAndForgetMethod)
1579 { 1591 {
1592 case FireAndForgetMethod.RegressionTest:
1580 case FireAndForgetMethod.None: 1593 case FireAndForgetMethod.None:
1581 realCallback.Invoke(obj); 1594 realCallback.Invoke(obj);
1582 break; 1595 break;