Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(336)

Unified Diff: net/disk_cache/blockfile/backend_impl.cc

Issue 542733002: Remove void** from disk_cache interface. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: more more explicit constructor Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/disk_cache/blockfile/backend_impl.cc
diff --git a/net/disk_cache/blockfile/backend_impl.cc b/net/disk_cache/blockfile/backend_impl.cc
index 0d258351a351bd4a5bddf186e750cac9fc4a324a..fe44bc202740266c8e84dc21c4a054954caa107e 100644
--- a/net/disk_cache/blockfile/backend_impl.cc
+++ b/net/disk_cache/blockfile/backend_impl.cc
@@ -52,6 +52,25 @@ const int kBaseTableLen = 64 * 1024;
// Avoid trimming the cache for the first 5 minutes (10 timer ticks).
const int kTrimDelay = 10;
+class BackendEnumerationState : public disk_cache::Backend::EnumerationState {
+ public:
+ explicit BackendEnumerationState(
+ base::WeakPtr<disk_cache::InFlightBackendIO> background_queue)
+ : background_queue_(background_queue),
+ data_(NULL) {}
+
+ virtual ~BackendEnumerationState() {
+ if (background_queue_)
+ background_queue_->EndEnumeration(*data());
+ }
+
+ void** data() { return &data_; }
+
+ private:
+ base::WeakPtr<disk_cache::InFlightBackendIO> background_queue_;
+ void* data_;
+};
+
int DesiredIndexTableLen(int32 storage_size) {
if (storage_size <= k64kEntriesStore)
return kBaseTableLen;
@@ -328,10 +347,15 @@ void BackendImpl::CleanupCache() {
// ------------------------------------------------------------------------
-int BackendImpl::OpenPrevEntry(void** iter, Entry** prev_entry,
+int BackendImpl::OpenPrevEntry(Iterator* iter, Entry** prev_entry,
const CompletionCallback& callback) {
DCHECK(!callback.is_null());
- background_queue_.OpenPrevEntry(iter, prev_entry, callback);
+ if (!*iter)
+ iter->reset(new BackendEnumerationState(GetBackgroundQueue()));
+ BackendEnumerationState* state =
+ static_cast<BackendEnumerationState*>(iter->get());
+
+ background_queue_.OpenPrevEntry(state->data(), prev_entry, callback);
return net::ERR_IO_PENDING;
}
@@ -1199,16 +1223,17 @@ int BackendImpl::DoomEntriesSince(const base::Time initial_time,
return net::ERR_IO_PENDING;
}
-int BackendImpl::OpenNextEntry(void** iter, Entry** next_entry,
+int BackendImpl::OpenNextEntry(Iterator* iter, Entry** next_entry,
const CompletionCallback& callback) {
+ // TODO(gavinp): Remove all void** iter from cache.
DCHECK(!callback.is_null());
- background_queue_.OpenNextEntry(iter, next_entry, callback);
- return net::ERR_IO_PENDING;
-}
+ if (!*iter)
+ iter->reset(new BackendEnumerationState(GetBackgroundQueue()));
+ BackendEnumerationState* state =
+ static_cast<BackendEnumerationState*>(iter->get());
-void BackendImpl::EndEnumeration(void** iter) {
- background_queue_.EndEnumeration(*iter);
- *iter = NULL;
+ background_queue_.OpenNextEntry(state->data(), next_entry, callback);
+ return net::ERR_IO_PENDING;
}
void BackendImpl::GetStats(StatsItems* stats) {

Powered by Google App Engine
This is Rietveld 408576698