aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
authorTom2011-05-17 18:44:07 -0700
committerTom2011-05-17 18:44:07 -0700
commite847d1d83f36a6d8e87fc9271c960b43c6ab6812 (patch)
treefefbd49a99af559ff7c1ef8dbfe310f7022a899f /OpenSim
parentFix up handling of the estate dialog to prevent duplication of ban list names. (diff)
downloadopensim-SC-e847d1d83f36a6d8e87fc9271c960b43c6ab6812.zip
opensim-SC-e847d1d83f36a6d8e87fc9271c960b43c6ab6812.tar.gz
opensim-SC-e847d1d83f36a6d8e87fc9271c960b43c6ab6812.tar.bz2
opensim-SC-e847d1d83f36a6d8e87fc9271c960b43c6ab6812.tar.xz
Lock m_requestMap properly to prevent some nasty access errors and the resulting downward spiral
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs81
1 files changed, 51 insertions, 30 deletions
diff --git a/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs b/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs
index fa17fb6..998f3d2 100644
--- a/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs
+++ b/OpenSim/Region/CoreModules/Scripting/LSLHttp/UrlModule.cs
@@ -233,9 +233,12 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
233 return; 233 return;
234 } 234 }
235 235
236 foreach (UUID req in data.requests.Keys) 236 lock (m_RequestMap)
237 m_RequestMap.Remove(req); 237 {
238 238 foreach (UUID req in data.requests.Keys)
239 m_RequestMap.Remove(req);
240 }
241
239 RemoveUrl(data); 242 RemoveUrl(data);
240 m_UrlMap.Remove(url); 243 m_UrlMap.Remove(url);
241 } 244 }
@@ -243,36 +246,42 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
243 246
244 public void HttpResponse(UUID request, int status, string body) 247 public void HttpResponse(UUID request, int status, string body)
245 { 248 {
246 if (m_RequestMap.ContainsKey(request)) 249 lock (m_RequestMap)
247 { 250 {
248 UrlData urlData = m_RequestMap[request]; 251 if (m_RequestMap.ContainsKey(request))
249 if (!urlData.requests[request].responseSent)
250 { 252 {
251 urlData.requests[request].responseCode = status; 253 UrlData urlData = m_RequestMap[request];
252 urlData.requests[request].responseBody = body; 254 if (!urlData.requests[request].responseSent)
253 //urlData.requests[request].ev.Set(); 255 {
254 urlData.requests[request].requestDone = true; 256 urlData.requests[request].responseCode = status;
255 urlData.requests[request].responseSent = true; 257 urlData.requests[request].responseBody = body;
258 //urlData.requests[request].ev.Set();
259 urlData.requests[request].requestDone = true;
260 urlData.requests[request].responseSent = true;
261 }
262 }
263 else
264 {
265 m_log.Info("[HttpRequestHandler] There is no http-in request with id " + request.ToString());
256 } 266 }
257 }
258 else
259 {
260 m_log.Info("[HttpRequestHandler] There is no http-in request with id " + request.ToString());
261 } 267 }
262 } 268 }
263 269
264 public string GetHttpHeader(UUID requestId, string header) 270 public string GetHttpHeader(UUID requestId, string header)
265 { 271 {
266 if (m_RequestMap.ContainsKey(requestId)) 272 lock (m_RequestMap)
267 {
268 UrlData urlData=m_RequestMap[requestId];
269 string value;
270 if (urlData.requests[requestId].headers.TryGetValue(header,out value))
271 return value;
272 }
273 else
274 { 273 {
275 m_log.Warn("[HttpRequestHandler] There was no http-in request with id " + requestId); 274 if (m_RequestMap.ContainsKey(requestId))
275 {
276 UrlData urlData = m_RequestMap[requestId];
277 string value;
278 if (urlData.requests[requestId].headers.TryGetValue(header, out value))
279 return value;
280 }
281 else
282 {
283 m_log.Warn("[HttpRequestHandler] There was no http-in request with id " + requestId);
284 }
276 } 285 }
277 return String.Empty; 286 return String.Empty;
278 } 287 }
@@ -294,8 +303,11 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
294 { 303 {
295 RemoveUrl(url.Value); 304 RemoveUrl(url.Value);
296 removeURLs.Add(url.Key); 305 removeURLs.Add(url.Key);
297 foreach (UUID req in url.Value.requests.Keys) 306 lock (m_RequestMap)
298 m_RequestMap.Remove(req); 307 {
308 foreach (UUID req in url.Value.requests.Keys)
309 m_RequestMap.Remove(req);
310 }
299 } 311 }
300 } 312 }
301 313
@@ -316,8 +328,11 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
316 { 328 {
317 RemoveUrl(url.Value); 329 RemoveUrl(url.Value);
318 removeURLs.Add(url.Key); 330 removeURLs.Add(url.Key);
319 foreach (UUID req in url.Value.requests.Keys) 331 lock (m_RequestMap)
320 m_RequestMap.Remove(req); 332 {
333 foreach (UUID req in url.Value.requests.Keys)
334 m_RequestMap.Remove(req);
335 }
321 } 336 }
322 } 337 }
323 338
@@ -355,7 +370,10 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
355 lock (url) 370 lock (url)
356 { 371 {
357 url.requests.Remove(requestID); 372 url.requests.Remove(requestID);
358 m_RequestMap.Remove(requestID); 373 lock (m_RequestMap)
374 {
375 m_RequestMap.Remove(requestID);
376 }
359 } 377 }
360 378
361 return response; 379 return response;
@@ -431,7 +449,10 @@ namespace OpenSim.Region.CoreModules.Scripting.LSLHttp
431 lock (url) 449 lock (url)
432 { 450 {
433 url.requests.Remove(requestID); 451 url.requests.Remove(requestID);
434 m_RequestMap.Remove(requestID); 452 lock (m_RequestMap)
453 {
454 m_RequestMap.Remove(requestID);
455 }
435 } 456 }
436 457
437 return response; 458 return response;