diff options
-rw-r--r-- | OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs | 43 |
1 files changed, 10 insertions, 33 deletions
diff --git a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs index e1aa460..169412e 100644 --- a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs +++ b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs | |||
@@ -352,7 +352,6 @@ namespace OpenSim.Region.CoreModules.Asset | |||
352 | return false; | 352 | return false; |
353 | } | 353 | } |
354 | 354 | ||
355 | |||
356 | /// <summary> | 355 | /// <summary> |
357 | /// Try to get an asset from the file cache. | 356 | /// Try to get an asset from the file cache. |
358 | /// </summary> | 357 | /// </summary> |
@@ -390,15 +389,16 @@ namespace OpenSim.Region.CoreModules.Asset | |||
390 | 389 | ||
391 | if (File.Exists(filename)) | 390 | if (File.Exists(filename)) |
392 | { | 391 | { |
393 | FileStream stream = null; | ||
394 | try | 392 | try |
395 | { | 393 | { |
396 | stream = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.Read); | 394 | using (FileStream stream = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.Read)) |
397 | BinaryFormatter bformatter = new BinaryFormatter(); | 395 | { |
396 | BinaryFormatter bformatter = new BinaryFormatter(); | ||
398 | 397 | ||
399 | asset = (AssetBase)bformatter.Deserialize(stream); | 398 | asset = (AssetBase)bformatter.Deserialize(stream); |
400 | 399 | ||
401 | m_DiskHits++; | 400 | m_DiskHits++; |
401 | } | ||
402 | } | 402 | } |
403 | catch (System.Runtime.Serialization.SerializationException e) | 403 | catch (System.Runtime.Serialization.SerializationException e) |
404 | { | 404 | { |
@@ -417,12 +417,6 @@ namespace OpenSim.Region.CoreModules.Asset | |||
417 | m_log.WarnFormat( | 417 | m_log.WarnFormat( |
418 | "[FLOTSAM ASSET CACHE]: Failed to get file {0} for asset {1}. Exception {2} {3}", | 418 | "[FLOTSAM ASSET CACHE]: Failed to get file {0} for asset {1}. Exception {2} {3}", |
419 | filename, id, e.Message, e.StackTrace); | 419 | filename, id, e.Message, e.StackTrace); |
420 | |||
421 | } | ||
422 | finally | ||
423 | { | ||
424 | if (stream != null) | ||
425 | stream.Close(); | ||
426 | } | 420 | } |
427 | } | 421 | } |
428 | 422 | ||
@@ -434,36 +428,19 @@ namespace OpenSim.Region.CoreModules.Asset | |||
434 | bool found = false; | 428 | bool found = false; |
435 | 429 | ||
436 | string filename = GetFileName(id); | 430 | string filename = GetFileName(id); |
431 | |||
437 | if (File.Exists(filename)) | 432 | if (File.Exists(filename)) |
438 | { | 433 | { |
439 | // actually check if we can open it, and so update expire | ||
440 | FileStream stream = null; | ||
441 | try | 434 | try |
442 | { | 435 | { |
443 | stream = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.Read); | 436 | using (FileStream stream = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.Read)) |
444 | if (stream != null) | ||
445 | { | 437 | { |
446 | found = true; | 438 | if (stream != null) |
447 | stream.Close(); | 439 | found = true; |
448 | } | 440 | } |
449 | |||
450 | } | ||
451 | catch (System.Runtime.Serialization.SerializationException e) | ||
452 | { | ||
453 | found = false; | ||
454 | m_log.ErrorFormat( | ||
455 | "[FLOTSAM ASSET CACHE]: Failed to check file {0} for asset {1}. Exception {2} {3}", | ||
456 | filename, id, e.Message, e.StackTrace); | ||
457 | |||
458 | // If there was a problem deserializing the asset, the asset may | ||
459 | // either be corrupted OR was serialized under an old format | ||
460 | // {different version of AssetBase} -- we should attempt to | ||
461 | // delete it and re-cache | ||
462 | File.Delete(filename); | ||
463 | } | 441 | } |
464 | catch (Exception e) | 442 | catch (Exception e) |
465 | { | 443 | { |
466 | found = false; | ||
467 | m_log.ErrorFormat( | 444 | m_log.ErrorFormat( |
468 | "[FLOTSAM ASSET CACHE]: Failed to check file {0} for asset {1}. Exception {2} {3}", | 445 | "[FLOTSAM ASSET CACHE]: Failed to check file {0} for asset {1}. Exception {2} {3}", |
469 | filename, id, e.Message, e.StackTrace); | 446 | filename, id, e.Message, e.StackTrace); |