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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user