Also fix the locking of url.requests and tidy the locks in general

avinationmerge
Tom 2011-05-17 18:56:55 -07:00
parent 3d49f5bf57
commit 1f17960e67
1 changed files with 31 additions and 23 deletions

View File

@ -351,14 +351,16 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
{ {
Hashtable response = new Hashtable(); Hashtable response = new Hashtable();
UrlData url; UrlData url;
int startTime = 0;
lock (m_RequestMap) lock (m_RequestMap)
{ {
if (!m_RequestMap.ContainsKey(requestID)) if (!m_RequestMap.ContainsKey(requestID))
return response; return response;
url = m_RequestMap[requestID]; url = m_RequestMap[requestID];
startTime = url.requests[requestID].startTime;
} }
if (System.Environment.TickCount - url.requests[requestID].startTime > 25000) if (System.Environment.TickCount - startTime > 25000)
{ {
response["int_response_code"] = 500; response["int_response_code"] = 500;
response["str_response_string"] = "Script timeout"; response["str_response_string"] = "Script timeout";
@ -367,13 +369,13 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
response["reusecontext"] = false; response["reusecontext"] = false;
//remove from map //remove from map
lock (url) lock (url.requests)
{ {
url.requests.Remove(requestID); url.requests.Remove(requestID);
lock (m_RequestMap) }
{ lock (m_RequestMap)
m_RequestMap.Remove(requestID); {
} m_RequestMap.Remove(requestID);
} }
return response; return response;
@ -394,22 +396,25 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
return false; return false;
} }
url = m_RequestMap[requestID]; url = m_RequestMap[requestID];
}
lock (url.requests)
{
if (!url.requests.ContainsKey(requestID)) if (!url.requests.ContainsKey(requestID))
{ {
return false; return false;
} }
else
{
if (System.Environment.TickCount - url.requests[requestID].startTime > 25000)
{
return true;
}
if (url.requests[requestID].requestDone)
return true;
else
return false;
}
} }
if (System.Environment.TickCount-url.requests[requestID].startTime>25000)
{
return true;
}
if (url.requests[requestID].requestDone)
return true;
else
return false;
} }
private Hashtable GetEvents(UUID requestID, UUID sessionID, string request) private Hashtable GetEvents(UUID requestID, UUID sessionID, string request)
{ {
@ -421,9 +426,12 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
if (!m_RequestMap.ContainsKey(requestID)) if (!m_RequestMap.ContainsKey(requestID))
return NoEvents(requestID,sessionID); return NoEvents(requestID,sessionID);
url = m_RequestMap[requestID]; url = m_RequestMap[requestID];
}
lock (url.requests)
{
requestData = url.requests[requestID]; requestData = url.requests[requestID];
} }
if (!requestData.requestDone) if (!requestData.requestDone)
return NoEvents(requestID,sessionID); return NoEvents(requestID,sessionID);
@ -446,13 +454,13 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
response["reusecontext"] = false; response["reusecontext"] = false;
//remove from map //remove from map
lock (url) lock (url.requests)
{ {
url.requests.Remove(requestID); url.requests.Remove(requestID);
lock (m_RequestMap) }
{ lock (m_RequestMap)
m_RequestMap.Remove(requestID); {
} m_RequestMap.Remove(requestID);
} }
return response; return response;