fix drop on delayed events processing
parent
442b272228
commit
e881562d34
|
@ -222,6 +222,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
new List<Hashtable>();
|
new List<Hashtable>();
|
||||||
private Dictionary<UUID, aPollResponse> responses =
|
private Dictionary<UUID, aPollResponse> responses =
|
||||||
new Dictionary<UUID, aPollResponse>();
|
new Dictionary<UUID, aPollResponse>();
|
||||||
|
private HashSet<UUID> dropedResponses = new HashSet<UUID>();
|
||||||
|
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
private MeshCapsDataThrottler m_throttler;
|
private MeshCapsDataThrottler m_throttler;
|
||||||
|
@ -242,11 +243,13 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Drop= (x, y) =>
|
Drop = (x, y) =>
|
||||||
{
|
{
|
||||||
lock (responses)
|
lock (responses)
|
||||||
{
|
{
|
||||||
responses.Remove(x);
|
responses.Remove(x);
|
||||||
|
lock(dropedResponses)
|
||||||
|
dropedResponses.Add(x);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -307,26 +310,47 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
if(m_scene.ShuttingDown)
|
if(m_scene.ShuttingDown)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// If the avatar is gone, don't bother to get the texture
|
lock(responses)
|
||||||
if (m_scene.GetScenePresence(Id) == null)
|
|
||||||
{
|
{
|
||||||
response = new Hashtable();
|
lock(dropedResponses)
|
||||||
|
{
|
||||||
|
if(dropedResponses.Contains(requestID))
|
||||||
|
{
|
||||||
|
dropedResponses.Remove(requestID);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the avatar is gone, don't bother to get the texture
|
||||||
|
if (m_scene.GetScenePresence(Id) == null)
|
||||||
|
{
|
||||||
|
response = new Hashtable();
|
||||||
|
|
||||||
response["int_response_code"] = 500;
|
response["int_response_code"] = 500;
|
||||||
response["str_response_string"] = "Script timeout";
|
response["str_response_string"] = "Script timeout";
|
||||||
response["content_type"] = "text/plain";
|
response["content_type"] = "text/plain";
|
||||||
response["keepalive"] = false;
|
response["keepalive"] = false;
|
||||||
response["reusecontext"] = false;
|
response["reusecontext"] = false;
|
||||||
|
|
||||||
lock (responses)
|
|
||||||
responses[requestID] = new aPollResponse() { bytes = 0, response = response, lod = 0 };
|
responses[requestID] = new aPollResponse() { bytes = 0, response = response, lod = 0 };
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
response = m_getMeshHandler.Handle(requestinfo.request);
|
response = m_getMeshHandler.Handle(requestinfo.request);
|
||||||
|
|
||||||
lock (responses)
|
lock (responses)
|
||||||
{
|
{
|
||||||
|
lock(dropedResponses)
|
||||||
|
{
|
||||||
|
if(dropedResponses.Contains(requestID))
|
||||||
|
{
|
||||||
|
dropedResponses.Remove(requestID);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
responses[requestID] = new aPollResponse()
|
responses[requestID] = new aPollResponse()
|
||||||
{
|
{
|
||||||
bytes = (int)response["int_bytes"],
|
bytes = (int)response["int_bytes"],
|
||||||
|
|
|
@ -218,6 +218,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
new List<Hashtable>();
|
new List<Hashtable>();
|
||||||
private Dictionary<UUID, aPollResponse> responses =
|
private Dictionary<UUID, aPollResponse> responses =
|
||||||
new Dictionary<UUID, aPollResponse>();
|
new Dictionary<UUID, aPollResponse>();
|
||||||
|
private HashSet<UUID> dropedResponses = new HashSet<UUID>();
|
||||||
|
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
private CapsDataThrottler m_throttler = new CapsDataThrottler(100000, 1400000,10000);
|
private CapsDataThrottler m_throttler = new CapsDataThrottler(100000, 1400000,10000);
|
||||||
|
@ -237,7 +238,14 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Drop = (x, y) => { lock (responses) responses.Remove(x); };
|
Drop = (x, y) =>
|
||||||
|
{
|
||||||
|
lock (responses)
|
||||||
|
{
|
||||||
|
responses.Remove(x);
|
||||||
|
dropedResponses.Add(x);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
GetEvents = (x, y) =>
|
GetEvents = (x, y) =>
|
||||||
{
|
{
|
||||||
|
@ -307,52 +315,71 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
if(m_scene.ShuttingDown)
|
if(m_scene.ShuttingDown)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (requestinfo.send503)
|
|
||||||
{
|
|
||||||
response = new Hashtable();
|
|
||||||
|
|
||||||
response["int_response_code"] = 503;
|
|
||||||
response["str_response_string"] = "Throttled";
|
|
||||||
response["content_type"] = "text/plain";
|
|
||||||
response["keepalive"] = false;
|
|
||||||
response["reusecontext"] = false;
|
|
||||||
|
|
||||||
Hashtable headers = new Hashtable();
|
|
||||||
headers["Retry-After"] = 30;
|
|
||||||
response["headers"] = headers;
|
|
||||||
|
|
||||||
lock (responses)
|
|
||||||
responses[requestID] = new aPollResponse() {bytes = 0, response = response};
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the avatar is gone, don't bother to get the texture
|
|
||||||
if (m_scene.GetScenePresence(Id) == null)
|
|
||||||
{
|
|
||||||
response = new Hashtable();
|
|
||||||
|
|
||||||
response["int_response_code"] = 500;
|
|
||||||
response["str_response_string"] = "Script timeout";
|
|
||||||
response["content_type"] = "text/plain";
|
|
||||||
response["keepalive"] = false;
|
|
||||||
response["reusecontext"] = false;
|
|
||||||
|
|
||||||
lock (responses)
|
|
||||||
responses[requestID] = new aPollResponse() {bytes = 0, response = response};
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
response = m_getTextureHandler.Handle(requestinfo.request);
|
|
||||||
lock (responses)
|
lock (responses)
|
||||||
{
|
{
|
||||||
responses[requestID] = new aPollResponse()
|
lock(dropedResponses)
|
||||||
{
|
{
|
||||||
bytes = (int) response["int_bytes"],
|
if(dropedResponses.Contains(requestID))
|
||||||
response = response
|
{
|
||||||
};
|
dropedResponses.Remove(requestID);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (requestinfo.send503)
|
||||||
|
{
|
||||||
|
response = new Hashtable();
|
||||||
|
|
||||||
|
response["int_response_code"] = 503;
|
||||||
|
response["str_response_string"] = "Throttled";
|
||||||
|
response["content_type"] = "text/plain";
|
||||||
|
response["keepalive"] = false;
|
||||||
|
response["reusecontext"] = false;
|
||||||
|
|
||||||
|
Hashtable headers = new Hashtable();
|
||||||
|
headers["Retry-After"] = 30;
|
||||||
|
response["headers"] = headers;
|
||||||
|
|
||||||
|
responses[requestID] = new aPollResponse() {bytes = 0, response = response};
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the avatar is gone, don't bother to get the texture
|
||||||
|
if (m_scene.GetScenePresence(Id) == null)
|
||||||
|
{
|
||||||
|
response = new Hashtable();
|
||||||
|
|
||||||
|
response["int_response_code"] = 500;
|
||||||
|
response["str_response_string"] = "Script timeout";
|
||||||
|
response["content_type"] = "text/plain";
|
||||||
|
response["keepalive"] = false;
|
||||||
|
response["reusecontext"] = false;
|
||||||
|
|
||||||
|
responses[requestID] = new aPollResponse() {bytes = 0, response = response};
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
response = m_getTextureHandler.Handle(requestinfo.request);
|
||||||
|
|
||||||
|
lock (responses)
|
||||||
|
{
|
||||||
|
lock(dropedResponses)
|
||||||
|
{
|
||||||
|
if(dropedResponses.Contains(requestID))
|
||||||
|
{
|
||||||
|
dropedResponses.Remove(requestID);
|
||||||
|
m_throttler.ProcessTime();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
responses[requestID] = new aPollResponse()
|
||||||
|
{
|
||||||
|
bytes = (int) response["int_bytes"],
|
||||||
|
response = response
|
||||||
|
};
|
||||||
}
|
}
|
||||||
m_throttler.ProcessTime();
|
m_throttler.ProcessTime();
|
||||||
}
|
}
|
||||||
|
|
|
@ -250,8 +250,8 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private Dictionary<UUID, Hashtable> responses =
|
private Dictionary<UUID, Hashtable> responses = new Dictionary<UUID, Hashtable>();
|
||||||
new Dictionary<UUID, Hashtable>();
|
private HashSet<UUID> dropedResponses = new HashSet<UUID>();
|
||||||
|
|
||||||
private WebFetchInvDescModule m_module;
|
private WebFetchInvDescModule m_module;
|
||||||
|
|
||||||
|
@ -261,7 +261,16 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
m_module = module;
|
m_module = module;
|
||||||
|
|
||||||
HasEvents = (x, y) => { lock (responses) return responses.ContainsKey(x); };
|
HasEvents = (x, y) => { lock (responses) return responses.ContainsKey(x); };
|
||||||
Drop = (x, y) => { lock (responses) responses.Remove(x); };
|
|
||||||
|
Drop = (x, y) =>
|
||||||
|
{
|
||||||
|
lock (responses)
|
||||||
|
{
|
||||||
|
responses.Remove(x);
|
||||||
|
lock(dropedResponses)
|
||||||
|
dropedResponses.Add(x);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
GetEvents = (x, y) =>
|
GetEvents = (x, y) =>
|
||||||
{
|
{
|
||||||
|
@ -367,6 +376,19 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
|
|
||||||
UUID requestID = requestinfo.reqID;
|
UUID requestID = requestinfo.reqID;
|
||||||
|
|
||||||
|
|
||||||
|
lock(responses)
|
||||||
|
{
|
||||||
|
lock(dropedResponses)
|
||||||
|
{
|
||||||
|
if(dropedResponses.Contains(requestID))
|
||||||
|
{
|
||||||
|
dropedResponses.Remove(requestID);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Hashtable response = new Hashtable();
|
Hashtable response = new Hashtable();
|
||||||
|
|
||||||
response["int_response_code"] = 200;
|
response["int_response_code"] = 200;
|
||||||
|
@ -379,6 +401,18 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
|
|
||||||
lock (responses)
|
lock (responses)
|
||||||
{
|
{
|
||||||
|
lock(dropedResponses)
|
||||||
|
{
|
||||||
|
if(dropedResponses.Contains(requestID))
|
||||||
|
{
|
||||||
|
dropedResponses.Remove(requestID);
|
||||||
|
requestinfo.folders.Clear();
|
||||||
|
requestinfo.request.Clear();
|
||||||
|
WebFetchInvDescModule.ProcessedRequestsCount++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (responses.ContainsKey(requestID))
|
if (responses.ContainsKey(requestID))
|
||||||
m_log.WarnFormat("[FETCH INVENTORY DESCENDENTS2 MODULE]: Caught in the act of loosing responses! Please report this on mantis #7054");
|
m_log.WarnFormat("[FETCH INVENTORY DESCENDENTS2 MODULE]: Caught in the act of loosing responses! Please report this on mantis #7054");
|
||||||
responses[requestID] = response;
|
responses[requestID] = response;
|
||||||
|
|
Loading…
Reference in New Issue