diff options
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.cs | 68 |
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 | ||