| Index: content/browser/gpu/shader_disk_cache.cc
|
| diff --git a/content/browser/gpu/shader_disk_cache.cc b/content/browser/gpu/shader_disk_cache.cc
|
| index a7f240ce565b8e49ebd4b7c55c87f56db84b1fbb..c97fd9e9922a272771df6c1b560dd596176e27bb 100644
|
| --- a/content/browser/gpu/shader_disk_cache.cc
|
| +++ b/content/browser/gpu/shader_disk_cache.cc
|
| @@ -23,6 +23,9 @@ void EntryCloser(disk_cache::Entry* entry) {
|
| entry->Close();
|
| }
|
|
|
| +void FreeDiskCacheIterator(scoped_ptr<disk_cache::Backend::Iterator> iterator) {
|
| +}
|
| +
|
| } // namespace
|
|
|
| // ShaderDiskCacheEntry handles the work of caching/updating the cached
|
| @@ -95,7 +98,7 @@ class ShaderDiskReadHelper
|
|
|
| base::WeakPtr<ShaderDiskCache> cache_;
|
| OpType op_type_;
|
| - void* iter_;
|
| + scoped_ptr<disk_cache::Backend::Iterator> iter_;
|
| scoped_refptr<net::IOBufferWithSize> buf_;
|
| int host_id_;
|
| disk_cache::Entry* entry_;
|
| @@ -243,7 +246,6 @@ ShaderDiskReadHelper::ShaderDiskReadHelper(
|
| int host_id)
|
| : cache_(cache),
|
| op_type_(OPEN_NEXT),
|
| - iter_(NULL),
|
| buf_(NULL),
|
| host_id_(host_id),
|
| entry_(NULL) {
|
| @@ -291,16 +293,17 @@ int ShaderDiskReadHelper::OpenNextEntry() {
|
| DCHECK(CalledOnValidThread());
|
| // Called through OnOpComplete, so we know |cache_| is valid.
|
| op_type_ = OPEN_NEXT_COMPLETE;
|
| - return cache_->backend()->OpenNextEntry(
|
| - &iter_,
|
| - &entry_,
|
| - base::Bind(&ShaderDiskReadHelper::OnOpComplete, this));
|
| + if (!iter_)
|
| + iter_ = cache_->backend()->CreateIterator();
|
| + return iter_->OpenNextEntry(
|
| + &entry_, base::Bind(&ShaderDiskReadHelper::OnOpComplete, this));
|
| }
|
|
|
| int ShaderDiskReadHelper::OpenNextEntryComplete(int rv) {
|
| DCHECK(CalledOnValidThread());
|
| // Called through OnOpComplete, so we know |cache_| is valid.
|
| if (rv == net::ERR_FAILED) {
|
| + iter_.reset();
|
| op_type_ = ITERATION_FINISHED;
|
| return net::OK;
|
| }
|
| @@ -339,16 +342,21 @@ int ShaderDiskReadHelper::ReadComplete(int rv) {
|
| int ShaderDiskReadHelper::IterationComplete(int rv) {
|
| DCHECK(CalledOnValidThread());
|
| // Called through OnOpComplete, so we know |cache_| is valid.
|
| - cache_->backend()->EndEnumeration(&iter_);
|
| - iter_ = NULL;
|
| + iter_.reset();
|
| op_type_ = TERMINATE;
|
| return net::OK;
|
| }
|
|
|
| ShaderDiskReadHelper::~ShaderDiskReadHelper() {
|
| - if (entry_)
|
| + if (entry_) {
|
| BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
|
| base::Bind(&EntryCloser, entry_));
|
| + }
|
| + if (iter_) {
|
| + BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
|
| + base::Bind(&FreeDiskCacheIterator,
|
| + base::Passed(&iter_)));
|
| + }
|
| }
|
|
|
| ShaderClearHelper::ShaderClearHelper(scoped_refptr<ShaderDiskCache> cache,
|
|
|