Added block for scenario: global exception handler called in loop when exception happens inside global exception handler

Added InnerException to output
ThreadPoolClientBranch
Tedd Hansen 2008-01-18 23:45:16 +00:00
parent 741d136f8c
commit d23222cbc6
2 changed files with 10 additions and 5 deletions

View File

@ -80,6 +80,7 @@ namespace OpenSim
} }
} }
private static bool _IsHandlingException = false; // Make sure we don't go recursive on ourself
/// <summary> /// <summary>
/// Global exception handler -- all unhandlet exceptions end up here :) /// Global exception handler -- all unhandlet exceptions end up here :)
/// </summary> /// </summary>
@ -87,6 +88,9 @@ namespace OpenSim
/// <param name="e"></param> /// <param name="e"></param>
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{ {
if (_IsHandlingException)
return;
_IsHandlingException = true;
// TODO: Add config option to allow users to turn off error reporting // TODO: Add config option to allow users to turn off error reporting
// TODO: Post error report (disabled for now) // TODO: Post error report (disabled for now)
@ -96,6 +100,9 @@ namespace OpenSim
msg += "\r\n"; msg += "\r\n";
msg += "Exception: " + e.ExceptionObject.ToString() + "\r\n"; msg += "Exception: " + e.ExceptionObject.ToString() + "\r\n";
Exception ex = (Exception)e.ExceptionObject;
if (ex.InnerException != null)
msg += "InnerException: " + ex.InnerException.ToString() + "\r\n";
msg += "\r\n"; msg += "\r\n";
msg += "Application is terminating: " + e.IsTerminating.ToString() + "\r\n"; msg += "Application is terminating: " + e.IsTerminating.ToString() + "\r\n";
@ -118,6 +125,8 @@ namespace OpenSim
{ {
// Ignore // Ignore
} }
_IsHandlingException=false;
} }
} }

View File

@ -1696,20 +1696,16 @@ namespace OpenSim.Region.Environment.Scenes
return LLUUID.Zero; return LLUUID.Zero;
} }
private static readonly object _performParcelPrimCountUpdateMutex = new object();
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public void performParcelPrimCountUpdate() public void performParcelPrimCountUpdate()
{
lock (_performParcelPrimCountUpdateMutex)
{ {
m_LandManager.resetAllLandPrimCounts(); m_LandManager.resetAllLandPrimCounts();
m_eventManager.TriggerParcelPrimCountUpdate(); m_eventManager.TriggerParcelPrimCountUpdate();
m_LandManager.finalizeLandPrimCountUpdate(); m_LandManager.finalizeLandPrimCountUpdate();
m_LandManager.landPrimCountTainted = false; m_LandManager.landPrimCountTainted = false;
} }
}
/// <summary> /// <summary>
/// ///