aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/Asset
diff options
context:
space:
mode:
authorMelanie2013-03-31 20:56:13 +0100
committerMelanie2013-03-31 20:56:13 +0100
commitae833af3a919432f48bf1f91b34725999fd4be54 (patch)
tree15b22b410913d2dbaf83e573d2ba93b0b23e4f1a /OpenSim/Region/CoreModules/Asset
parentMerge branch 'master' of ssh://3dhosting.de/var/git/careminster (diff)
parentIn the flotasm asset cache, if we get a request for a file that we're activel... (diff)
downloadopensim-SC_OLD-ae833af3a919432f48bf1f91b34725999fd4be54.zip
opensim-SC_OLD-ae833af3a919432f48bf1f91b34725999fd4be54.tar.gz
opensim-SC_OLD-ae833af3a919432f48bf1f91b34725999fd4be54.tar.bz2
opensim-SC_OLD-ae833af3a919432f48bf1f91b34725999fd4be54.tar.xz
Merge branch 'master' into careminster
Conflicts: OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
Diffstat (limited to 'OpenSim/Region/CoreModules/Asset')
-rw-r--r--OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs68
1 files changed, 29 insertions, 39 deletions
diff --git a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs
index 08e7cb7..d510d82 100644
--- a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs
+++ b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs
@@ -365,11 +365,36 @@ namespace OpenSim.Region.CoreModules.Asset
365 /// <param name="id"></param> 365 /// <param name="id"></param>
366 /// <returns>An asset retrieved from the file cache. null if there was a problem retrieving an asset.</returns> 366 /// <returns>An asset retrieved from the file cache. null if there was a problem retrieving an asset.</returns>
367 private AssetBase GetFromFileCache(string id) 367 private AssetBase GetFromFileCache(string id)
368 { 368 {
369 AssetBase asset = null;
370
371 string filename = GetFileName(id); 369 string filename = GetFileName(id);
372 while (File.Exists(filename)) 370
371#if WAIT_ON_INPROGRESS_REQUESTS
372 // Check if we're already downloading this asset. If so, try to wait for it to
373 // download.
374 if (m_WaitOnInprogressTimeout > 0)
375 {
376 m_RequestsForInprogress++;
377
378 ManualResetEvent waitEvent;
379 if (m_CurrentlyWriting.TryGetValue(filename, out waitEvent))
380 {
381 waitEvent.WaitOne(m_WaitOnInprogressTimeout);
382 return Get(id);
383 }
384 }
385#else
386 // Track how often we have the problem that an asset is requested while
387 // it is still being downloaded by a previous request.
388 if (m_CurrentlyWriting.Contains(filename))
389 {
390 m_RequestsForInprogress++;
391 return null;
392 }
393#endif
394
395 AssetBase asset = null;
396
397 if (File.Exists(filename))
373 { 398 {
374 FileStream stream = null; 399 FileStream stream = null;
375 try 400 try
@@ -380,8 +405,6 @@ namespace OpenSim.Region.CoreModules.Asset
380 asset = (AssetBase)bformatter.Deserialize(stream); 405 asset = (AssetBase)bformatter.Deserialize(stream);
381 406
382 m_DiskHits++; 407 m_DiskHits++;
383
384 break;
385 } 408 }
386 catch (System.Runtime.Serialization.SerializationException e) 409 catch (System.Runtime.Serialization.SerializationException e)
387 { 410 {
@@ -394,16 +417,6 @@ namespace OpenSim.Region.CoreModules.Asset
394 // {different version of AssetBase} -- we should attempt to 417 // {different version of AssetBase} -- we should attempt to
395 // delete it and re-cache 418 // delete it and re-cache
396 File.Delete(filename); 419 File.Delete(filename);
397
398 break;
399 }
400 catch (IOException e)
401 {
402 // This is a sharing violation: File exists but can't be opened because it's
403 // being written
404 Thread.Sleep(100);
405
406 continue;
407 } 420 }
408 catch (Exception e) 421 catch (Exception e)
409 { 422 {
@@ -411,7 +424,6 @@ namespace OpenSim.Region.CoreModules.Asset
411 "[FLOTSAM ASSET CACHE]: Failed to get file {0} for asset {1}. Exception {2} {3}", 424 "[FLOTSAM ASSET CACHE]: Failed to get file {0} for asset {1}. Exception {2} {3}",
412 filename, id, e.Message, e.StackTrace); 425 filename, id, e.Message, e.StackTrace);
413 426
414 break;
415 } 427 }
416 finally 428 finally
417 { 429 {
@@ -420,28 +432,6 @@ namespace OpenSim.Region.CoreModules.Asset
420 } 432 }
421 } 433 }
422 434
423#if WAIT_ON_INPROGRESS_REQUESTS
424 // Check if we're already downloading this asset. If so, try to wait for it to
425 // download.
426 if (m_WaitOnInprogressTimeout > 0)
427 {
428 m_RequestsForInprogress++;
429
430 ManualResetEvent waitEvent;
431 if (m_CurrentlyWriting.TryGetValue(filename, out waitEvent))
432 {
433 waitEvent.WaitOne(m_WaitOnInprogressTimeout);
434 return Get(id);
435 }
436 }
437#else
438 // Track how often we have the problem that an asset is requested while
439 // it is still being downloaded by a previous request.
440 if (m_CurrentlyWriting.Contains(filename))
441 {
442 m_RequestsForInprogress++;
443 }
444#endif
445 return asset; 435 return asset;
446 } 436 }
447 437