Index: net/disk_cache/simple/simple_backend_impl.h |
diff --git a/net/disk_cache/simple/simple_backend_impl.h b/net/disk_cache/simple/simple_backend_impl.h |
index 4f01351752e1bd80893966732bca1a5f5d448f15..b7b4eeb5793faf99308f64b065be11cb8f16b25d 100644 |
--- a/net/disk_cache/simple/simple_backend_impl.h |
+++ b/net/disk_cache/simple/simple_backend_impl.h |
@@ -9,6 +9,7 @@ |
#include <utility> |
#include <vector> |
+#include "base/callback_forward.h" |
#include "base/compiler_specific.h" |
#include "base/containers/hash_tables.h" |
#include "base/files/file_path.h" |
@@ -64,6 +65,15 @@ class NET_EXPORT_PRIVATE SimpleBackendImpl : public Backend, |
// operations to construct a new object. |
void OnDeactivated(const SimpleEntryImpl* entry); |
+ // The entry for |entry_hash| is being doomed; the backend will not attempt |
+ // run new operations for this |entry_hash| until the Doom is completed. |
+ void OnDoomStart(uint64 entry_hash); |
+ |
+ // The entry for |entry_hash| has been successfully doomed, we can now allow |
+ // operations on this entry, and we can run any operations enqueued while the |
+ // doom completed. |
+ void OnDoomComplete(uint64 entry_hash); |
+ |
// Backend: |
virtual net::CacheType GetCacheType() const OVERRIDE; |
virtual int32 GetEntryCount() const OVERRIDE; |
@@ -118,6 +128,7 @@ class NET_EXPORT_PRIVATE SimpleBackendImpl : public Backend, |
// Searches |active_entries_| for the entry corresponding to |key|. If found, |
// returns the found entry. Otherwise, creates a new entry and returns that. |
scoped_refptr<SimpleEntryImpl> CreateOrFindActiveEntry( |
+ uint64 entry_hash, |
const std::string& key); |
// Given a hash, will try to open the corresponding Entry. If we have an Entry |
@@ -170,10 +181,14 @@ class NET_EXPORT_PRIVATE SimpleBackendImpl : public Backend, |
int orig_max_size_; |
const SimpleEntryImpl::OperationsMode entry_operations_mode_; |
- // TODO(gavinp): Store the entry_hash in SimpleEntryImpl, and index this map |
- // by hash. This will save memory, and make IndexReadyForDoom easier. |
EntryMap active_entries_; |
+ // The set of all entries which are currently being doomed. To avoid races, |
+ // these entries cannot have Doom/Create/Open operations run until the doom |
+ // is complete. The base::Closure map target is used to store deferred |
+ // operations to be run at the completion of the Doom. |
+ base::hash_map<uint64, base::Closure> entries_pending_doom_; |
+ |
net::NetLog* const net_log_; |
}; |