Handle incoming caps events sync rather than async to avoid unexpected out-of-order processing

Under moderate or greater CPU load, pushing to the threadpool means that events such as EstablishAgentCommunication may be processed before EnableSimulator
even though the simulator sends them in the reverse order.
This triggers the logging of various errors and warnings by libomv.
Handling these synchronously shouldn't have a huge impact since the number of events is not high and taking time here can only hold up event upload
This commit is contained in:
Justin Clark-Casey
2014-08-04 22:14:04 +01:00
parent 5f94bda11f
commit 7b094a35dd

View File

@@ -324,24 +324,27 @@ namespace OpenMetaverse
{
if (callback != null)
{
CapsCallbackWrapper wrapper;
wrapper.Callback = callback;
wrapper.CapsEvent = capsEvent;
wrapper.Message = message;
wrapper.Simulator = simulator;
WorkPool.QueueUserWorkItem(_ThreadPoolCallback, wrapper);
callback(capsEvent, message, simulator);
// CapsCallbackWrapper wrapper;
// wrapper.Callback = callback;
// wrapper.CapsEvent = capsEvent;
// wrapper.Message = message;
// wrapper.Simulator = simulator;
// WorkPool.QueueUserWorkItem(_ThreadPoolCallback, wrapper);
}
}
// Explicit handler next
if (_EventTable.TryGetValue(capsEvent, out callback) && callback != null)
{
CapsCallbackWrapper wrapper;
wrapper.Callback = callback;
wrapper.CapsEvent = capsEvent;
wrapper.Message = message;
wrapper.Simulator = simulator;
WorkPool.QueueUserWorkItem(_ThreadPoolCallback, wrapper);
callback(capsEvent, message, simulator);
// CapsCallbackWrapper wrapper;
// wrapper.Callback = callback;
// wrapper.CapsEvent = capsEvent;
// wrapper.Message = message;
// wrapper.Simulator = simulator;
// WorkPool.QueueUserWorkItem(_ThreadPoolCallback, wrapper);
specialHandler = true;
}