aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/Communications
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2014-12-20 01:56:33 +0000
committerJustin Clark-Casey (justincc)2014-12-20 01:56:33 +0000
commit7100475b90a097a3a1775d2b92756e1260383c73 (patch)
treea67b756d4d5509e71bdb882b8430248f7f20142c /OpenSim/Framework/Communications
parentIn XBakesModule.Get() use using() to always dispose of RestClient which dispo... (diff)
downloadopensim-SC-7100475b90a097a3a1775d2b92756e1260383c73.zip
opensim-SC-7100475b90a097a3a1775d2b92756e1260383c73.tar.gz
opensim-SC-7100475b90a097a3a1775d2b92756e1260383c73.tar.bz2
opensim-SC-7100475b90a097a3a1775d2b92756e1260383c73.tar.xz
Make sure we always dispose of disposables inside RestClient.Request()
Diffstat (limited to 'OpenSim/Framework/Communications')
-rw-r--r--OpenSim/Framework/Communications/RestClient.cs56
1 files changed, 30 insertions, 26 deletions
diff --git a/OpenSim/Framework/Communications/RestClient.cs b/OpenSim/Framework/Communications/RestClient.cs
index 4a8301e..6f517b6 100644
--- a/OpenSim/Framework/Communications/RestClient.cs
+++ b/OpenSim/Framework/Communications/RestClient.cs
@@ -352,42 +352,46 @@ namespace OpenSim.Framework.Communications
352 m_log.DebugFormat("[LOGHTTP]: HTTP OUT {0} REST {1} to {2}", reqnum, _request.Method, _request.RequestUri); 352 m_log.DebugFormat("[LOGHTTP]: HTTP OUT {0} REST {1} to {2}", reqnum, _request.Method, _request.RequestUri);
353 353
354// IAsyncResult responseAsyncResult = _request.BeginGetResponse(new AsyncCallback(ResponseIsReadyDelegate), _request); 354// IAsyncResult responseAsyncResult = _request.BeginGetResponse(new AsyncCallback(ResponseIsReadyDelegate), _request);
355
355 try 356 try
356 { 357 {
357 _response = (HttpWebResponse) _request.GetResponse(); 358 using (_response = (HttpWebResponse) _request.GetResponse())
359 {
360 using (Stream src = _response.GetResponseStream())
361 {
362 int length = src.Read(_readbuf, 0, BufferSize);
363 while (length > 0)
364 {
365 _resource.Write(_readbuf, 0, length);
366 length = src.Read(_readbuf, 0, BufferSize);
367 }
368
369 // TODO! Implement timeout, without killing the server
370 // this line implements the timeout, if there is a timeout, the callback fires and the request becomes aborted
371 //ThreadPool.RegisterWaitForSingleObject(responseAsyncResult.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), _request, DefaultTimeout, true);
372
373 // _allDone.WaitOne();
374 }
375 }
358 } 376 }
359 catch (WebException e) 377 catch (WebException e)
360 { 378 {
361 HttpWebResponse errorResponse = e.Response as HttpWebResponse; 379 using (HttpWebResponse errorResponse = e.Response as HttpWebResponse)
362 if (null != errorResponse && HttpStatusCode.NotFound == errorResponse.StatusCode)
363 {
364 // This is often benign. E.g., requesting a missing asset will return 404.
365 m_log.DebugFormat("[REST CLIENT] Resource not found (404): {0}", _request.Address.ToString());
366 }
367 else
368 { 380 {
369 m_log.Error(string.Format("[REST CLIENT] Error fetching resource from server: {0} ", _request.Address.ToString()), e); 381 if (null != errorResponse && HttpStatusCode.NotFound == errorResponse.StatusCode)
382 {
383 // This is often benign. E.g., requesting a missing asset will return 404.
384 m_log.DebugFormat("[REST CLIENT] Resource not found (404): {0}", _request.Address.ToString());
385 }
386 else
387 {
388 m_log.Error(string.Format("[REST CLIENT] Error fetching resource from server: {0} ", _request.Address.ToString()), e);
389 }
370 } 390 }
371 391
372 return null; 392 return null;
373 } 393 }
374 394
375 Stream src = _response.GetResponseStream();
376 int length = src.Read(_readbuf, 0, BufferSize);
377 while (length > 0)
378 {
379 _resource.Write(_readbuf, 0, length);
380 length = src.Read(_readbuf, 0, BufferSize);
381 }
382
383
384 // TODO! Implement timeout, without killing the server
385 // this line implements the timeout, if there is a timeout, the callback fires and the request becomes aborted
386 //ThreadPool.RegisterWaitForSingleObject(responseAsyncResult.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), _request, DefaultTimeout, true);
387
388// _allDone.WaitOne();
389 if (_response != null)
390 _response.Close();
391 if (_asyncException != null) 395 if (_asyncException != null)
392 throw _asyncException; 396 throw _asyncException;
393 397
@@ -515,4 +519,4 @@ namespace OpenSim.Framework.Communications
515 519
516 #endregion Async Invocation 520 #endregion Async Invocation
517 } 521 }
518} 522} \ No newline at end of file