diff options
Diffstat (limited to 'src/unstable')
-rw-r--r-- | src/unstable/cachebase.h | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/unstable/cachebase.h b/src/unstable/cachebase.h index b17d377..3db257b 100644 --- a/src/unstable/cachebase.h +++ b/src/unstable/cachebase.h | |||
@@ -595,10 +595,24 @@ namespace Bu | |||
595 | { | 595 | { |
596 | for( typename CacheKeySet::iterator i = hChanged.begin(); i; i++ ) | 596 | for( typename CacheKeySet::iterator i = hChanged.begin(); i; i++ ) |
597 | { | 597 | { |
598 | Entry *pEnt = hCacheEntry.get( i.getKey() ); | 598 | Entry *pEnt = NULL; |
599 | Bu::MutexLocker ml( pEnt->getMutex() ); | 599 | try |
600 | _save( pEnt->getPtr() ); | 600 | { |
601 | pEnt->getPtr()->changed( false ); | 601 | pEnt = hCacheEntry.get( i.getKey() ); |
602 | } | ||
603 | catch( Bu::HashException ) | ||
604 | { | ||
605 | // The entry wasn't there, most likely because it | ||
606 | // was deleted. That's ok. | ||
607 | } | ||
608 | // This isn't inside of the above because we want to be | ||
609 | // able to handle these exceptions differently. | ||
610 | if( pEnt ) | ||
611 | { | ||
612 | Bu::MutexLocker ml( pEnt->getMutex() ); | ||
613 | _save( pEnt->getPtr() ); | ||
614 | pEnt->getPtr()->changed( false ); | ||
615 | } | ||
602 | } | 616 | } |
603 | hChanged.clear(); | 617 | hChanged.clear(); |
604 | } | 618 | } |