log exceptions that end up at the top of a asynchronous viewer packet method call rather than swallowing them

slimupdates
Justin Clark-Casey (justincc) 2010-04-05 19:46:43 +01:00
parent 9ecad50419
commit 1be19c7f42
1 changed files with 13 additions and 3 deletions

View File

@ -641,7 +641,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
if (pprocessor.Async) if (pprocessor.Async)
{ {
object obj = new AsyncPacketProcess(this, pprocessor.method, packet); object obj = new AsyncPacketProcess(this, pprocessor.method, packet);
Util.FireAndForget(ProcessSpecificPacketAsync,obj); Util.FireAndForget(ProcessSpecificPacketAsync, obj);
result = true; result = true;
} }
else else
@ -669,7 +669,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP
public void ProcessSpecificPacketAsync(object state) public void ProcessSpecificPacketAsync(object state)
{ {
AsyncPacketProcess packetObject = (AsyncPacketProcess)state; AsyncPacketProcess packetObject = (AsyncPacketProcess)state;
packetObject.result = packetObject.Method(packetObject.ClientView, packetObject.Pack);
try
{
packetObject.result = packetObject.Method(packetObject.ClientView, packetObject.Pack);
}
catch (Exception e)
{
// Make sure that we see any exception caused by the asynchronous operation.
m_log.Error(
string.Format("[LLCLIENTVIEW]: Caught exception while processing {0}", packetObject.Pack), e);
}
} }
#endregion Packet Handling #endregion Packet Handling
@ -11695,4 +11705,4 @@ namespace OpenSim.Region.ClientStack.LindenUDP
OutPacket(dialog, ThrottleOutPacketType.Task); OutPacket(dialog, ThrottleOutPacketType.Task);
} }
} }
} }