OLD | NEW |
---|---|
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/disk_cache/simple/simple_entry_impl.h" | 5 #include "net/disk_cache/simple/simple_entry_impl.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/callback.h" | 9 #include "base/callback.h" |
10 #include "base/location.h" | 10 #include "base/location.h" |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
67 const CompletionCallback& callback) { | 67 const CompletionCallback& callback) { |
68 WorkerPool::PostTask(FROM_HERE, | 68 WorkerPool::PostTask(FROM_HERE, |
69 base::Bind(&SimpleSynchronousEntry::DoomEntry, path, key, | 69 base::Bind(&SimpleSynchronousEntry::DoomEntry, path, key, |
70 MessageLoopProxy::current(), callback), | 70 MessageLoopProxy::current(), callback), |
71 true); | 71 true); |
72 return net::ERR_IO_PENDING; | 72 return net::ERR_IO_PENDING; |
73 } | 73 } |
74 | 74 |
75 void SimpleEntryImpl::Doom() { | 75 void SimpleEntryImpl::Doom() { |
76 DCHECK(thread_checker_.CalledOnValidThread()); | 76 DCHECK(thread_checker_.CalledOnValidThread()); |
77 if (synchronous_entry_in_use_by_worker_) { | 77 #if defined(OS_POSIX) |
78 NOTIMPLEMENTED() << ": Overlapping an asynchronous operation."; | 78 // This call to static SimpleEntryImpl::DoomEntry() will just erase the |
rvargas (doing something else)
2013/02/13 03:23:46
I think this is wrong, but it is also wrong on the
felipeg
2013/02/13 13:47:36
Hi Ricardo,
Sorry, why ReaData(old_content) will
| |
79 return; | 79 // underlying files. On POSIX, this is fine; the files are still open on the |
80 } | 80 // SimpleSynchronousEntry, and operations can even happen on them. The files |
81 WorkerPool::PostTask(FROM_HERE, | 81 // will be removed from the filesystem when they are closed. |
82 base::Bind(&SimpleSynchronousEntry::DoomAndClose, | 82 DoomEntry(path_, key_, CompletionCallback()); |
83 base::Unretained(synchronous_entry_)), | 83 #else |
84 true); | 84 NOTIMPLEMENTED(); |
85 synchronous_entry_ = NULL; | 85 #endif |
86 has_been_doomed_ = true; | |
87 } | 86 } |
88 | 87 |
89 void SimpleEntryImpl::Close() { | 88 void SimpleEntryImpl::Close() { |
90 DCHECK(thread_checker_.CalledOnValidThread()); | 89 DCHECK(thread_checker_.CalledOnValidThread()); |
91 if (synchronous_entry_in_use_by_worker_) { | 90 if (synchronous_entry_in_use_by_worker_) { |
92 NOTIMPLEMENTED() << ": Overlapping an asynchronous operation."; | 91 NOTIMPLEMENTED() << ": Overlapping an asynchronous operation."; |
93 delete this; | 92 delete this; |
94 return; | 93 return; |
95 } | 94 } |
96 DCHECK(synchronous_entry_ || has_been_doomed_); | 95 DCHECK(synchronous_entry_); |
97 if (!has_been_doomed_) { | 96 WorkerPool::PostTask(FROM_HERE, |
98 WorkerPool::PostTask(FROM_HERE, | 97 base::Bind(&SimpleSynchronousEntry::Close, |
99 base::Bind(&SimpleSynchronousEntry::Close, | 98 base::Unretained(synchronous_entry_)), |
100 base::Unretained(synchronous_entry_)), | 99 true); |
101 true); | 100 synchronous_entry_ = NULL; |
102 synchronous_entry_ = NULL; | |
103 } | |
104 // Entry::Close() is expected to release this entry. See disk_cache.h for | 101 // Entry::Close() is expected to release this entry. See disk_cache.h for |
105 // details. | 102 // details. |
106 delete this; | 103 delete this; |
107 } | 104 } |
108 | 105 |
109 std::string SimpleEntryImpl::GetKey() const { | 106 std::string SimpleEntryImpl::GetKey() const { |
110 DCHECK(thread_checker_.CalledOnValidThread()); | 107 DCHECK(thread_checker_.CalledOnValidThread()); |
111 return key_; | 108 return key_; |
112 } | 109 } |
113 | 110 |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
224 NOTIMPLEMENTED(); | 221 NOTIMPLEMENTED(); |
225 return net::ERR_FAILED; | 222 return net::ERR_FAILED; |
226 } | 223 } |
227 | 224 |
228 SimpleEntryImpl::SimpleEntryImpl( | 225 SimpleEntryImpl::SimpleEntryImpl( |
229 SimpleSynchronousEntry* synchronous_entry) | 226 SimpleSynchronousEntry* synchronous_entry) |
230 : ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)), | 227 : ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)), |
231 path_(synchronous_entry->path()), | 228 path_(synchronous_entry->path()), |
232 key_(synchronous_entry->key()), | 229 key_(synchronous_entry->key()), |
233 synchronous_entry_(NULL), | 230 synchronous_entry_(NULL), |
234 synchronous_entry_in_use_by_worker_(false), | 231 synchronous_entry_in_use_by_worker_(false) { |
235 has_been_doomed_(false) { | |
236 SetSynchronousData(); | 232 SetSynchronousData(); |
237 } | 233 } |
238 | 234 |
239 SimpleEntryImpl::~SimpleEntryImpl() { | 235 SimpleEntryImpl::~SimpleEntryImpl() { |
240 DCHECK(thread_checker_.CalledOnValidThread()); | 236 DCHECK(thread_checker_.CalledOnValidThread()); |
241 DCHECK(!synchronous_entry_) << "synchronous_entry_ = " << synchronous_entry_; | 237 DCHECK(!synchronous_entry_) << "synchronous_entry_ = " << synchronous_entry_; |
242 } | 238 } |
243 | 239 |
244 // static | 240 // static |
245 void SimpleEntryImpl::CreationOperationComplete( | 241 void SimpleEntryImpl::CreationOperationComplete( |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
285 // in that structure. This also solves problems with last_used() on ext4 | 281 // in that structure. This also solves problems with last_used() on ext4 |
286 // filesystems not being accurate. | 282 // filesystems not being accurate. |
287 | 283 |
288 last_used_ = synchronous_entry_->last_used(); | 284 last_used_ = synchronous_entry_->last_used(); |
289 last_modified_ = synchronous_entry_->last_modified(); | 285 last_modified_ = synchronous_entry_->last_modified(); |
290 for (int i = 0; i < kSimpleEntryFileCount; ++i) | 286 for (int i = 0; i < kSimpleEntryFileCount; ++i) |
291 data_size_[i] = synchronous_entry_->data_size(i); | 287 data_size_[i] = synchronous_entry_->data_size(i); |
292 } | 288 } |
293 | 289 |
294 } // namespace disk_cache | 290 } // namespace disk_cache |
OLD | NEW |