Fixed a locking bug in the icon cache.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15172 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -349,6 +349,8 @@ IconCacheEntry *
|
|||||||
IconCache::GetIconFromMetaMime(const char *fileType, IconDrawMode mode,
|
IconCache::GetIconFromMetaMime(const char *fileType, IconDrawMode mode,
|
||||||
icon_size size, LazyBitmapAllocator *lazyBitmap, IconCacheEntry *entry)
|
icon_size size, LazyBitmapAllocator *lazyBitmap, IconCacheEntry *entry)
|
||||||
{
|
{
|
||||||
|
ASSERT(fSharedCache.IsLocked());
|
||||||
|
|
||||||
if (!entry)
|
if (!entry)
|
||||||
entry = fSharedCache.FindItem(fileType);
|
entry = fSharedCache.FindItem(fileType);
|
||||||
|
|
||||||
@@ -505,7 +507,7 @@ IconCache::GetVolumeIcon(AutoLock<SimpleIconCache> *nodeCacheLocker,
|
|||||||
IconDrawMode mode, icon_size size, LazyBitmapAllocator *lazyBitmap)
|
IconDrawMode mode, icon_size size, LazyBitmapAllocator *lazyBitmap)
|
||||||
{
|
{
|
||||||
*resultingOpenCache = nodeCacheLocker;
|
*resultingOpenCache = nodeCacheLocker;
|
||||||
(*resultingOpenCache)->Lock();
|
nodeCacheLocker->Lock();
|
||||||
|
|
||||||
IconCacheEntry *entry = 0;
|
IconCacheEntry *entry = 0;
|
||||||
if (source != kUnknownSource) {
|
if (source != kUnknownSource) {
|
||||||
@@ -519,7 +521,7 @@ IconCache::GetVolumeIcon(AutoLock<SimpleIconCache> *nodeCacheLocker,
|
|||||||
// this could be done a little cleaner if entry had a way to reach
|
// this could be done a little cleaner if entry had a way to reach
|
||||||
// the cache it is in
|
// the cache it is in
|
||||||
*resultingOpenCache = sharedCacheLocker;
|
*resultingOpenCache = sharedCacheLocker;
|
||||||
(*resultingOpenCache)->Lock();
|
sharedCacheLocker->Lock();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entry->HaveIconBitmap(mode, size))
|
if (entry->HaveIconBitmap(mode, size))
|
||||||
@@ -555,6 +557,9 @@ IconCache::GetVolumeIcon(AutoLock<SimpleIconCache> *nodeCacheLocker,
|
|||||||
entry->SetIcon(bitmap, kNormalIcon, size);
|
entry->SetIcon(bitmap, kNormalIcon, size);
|
||||||
source = kVolume;
|
source = kVolume;
|
||||||
} else {
|
} else {
|
||||||
|
*resultingOpenCache = sharedCacheLocker;
|
||||||
|
sharedCacheLocker->Lock();
|
||||||
|
|
||||||
// If the volume doesnt have a device it should have the generic icon
|
// If the volume doesnt have a device it should have the generic icon
|
||||||
entry = GetIconFromMetaMime(B_VOLUME_MIMETYPE, mode,
|
entry = GetIconFromMetaMime(B_VOLUME_MIMETYPE, mode,
|
||||||
size, lazyBitmap, entry);
|
size, lazyBitmap, entry);
|
||||||
|
|||||||
Reference in New Issue
Block a user