| OLD | NEW |
| 1 // Copyright (c) 2009-2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009-2010 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/sparse_control.h" | 5 #include "net/disk_cache/sparse_control.h" |
| 6 | 6 |
| 7 #include "base/format_macros.h" | 7 #include "base/format_macros.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
| 10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 // And wait until OnFileIOComplete gets called. | 119 // And wait until OnFileIOComplete gets called. |
| 120 } | 120 } |
| 121 | 121 |
| 122 void ChildrenDeleter::DeleteChildren() { | 122 void ChildrenDeleter::DeleteChildren() { |
| 123 int child_id = 0; | 123 int child_id = 0; |
| 124 if (!children_map_.FindNextSetBit(&child_id)) { | 124 if (!children_map_.FindNextSetBit(&child_id)) { |
| 125 // We are done. Just delete this object. | 125 // We are done. Just delete this object. |
| 126 return Release(); | 126 return Release(); |
| 127 } | 127 } |
| 128 std::string child_name = GenerateChildName(name_, signature_, child_id); | 128 std::string child_name = GenerateChildName(name_, signature_, child_id); |
| 129 backend_->DoomEntry(child_name); | 129 backend_->SyncDoomEntry(child_name); |
| 130 children_map_.Set(child_id, false); | 130 children_map_.Set(child_id, false); |
| 131 | 131 |
| 132 // Post a task to delete the next child. | 132 // Post a task to delete the next child. |
| 133 MessageLoop::current()->PostTask(FROM_HERE, NewRunnableMethod( | 133 MessageLoop::current()->PostTask(FROM_HERE, NewRunnableMethod( |
| 134 this, &ChildrenDeleter::DeleteChildren)); | 134 this, &ChildrenDeleter::DeleteChildren)); |
| 135 } | 135 } |
| 136 | 136 |
| 137 } // namespace. | 137 } // namespace. |
| 138 | 138 |
| 139 namespace disk_cache { | 139 namespace disk_cache { |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 366 DCHECK_GE(result_, 0); | 366 DCHECK_GE(result_, 0); |
| 367 | 367 |
| 368 std::string key = GenerateChildKey(); | 368 std::string key = GenerateChildKey(); |
| 369 if (child_) { | 369 if (child_) { |
| 370 // Keep using the same child or open another one?. | 370 // Keep using the same child or open another one?. |
| 371 if (key == child_->GetKey()) | 371 if (key == child_->GetKey()) |
| 372 return true; | 372 return true; |
| 373 CloseChild(); | 373 CloseChild(); |
| 374 } | 374 } |
| 375 | 375 |
| 376 // Se if we are tracking this child. | 376 // See if we are tracking this child. |
| 377 if (!ChildPresent()) | 377 if (!ChildPresent()) |
| 378 return ContinueWithoutChild(key); | 378 return ContinueWithoutChild(key); |
| 379 | 379 |
| 380 child_ = entry_->backend_->OpenEntryImpl(key); | 380 child_ = entry_->backend_->OpenEntryImpl(key); |
| 381 if (!child_) | 381 if (!child_) |
| 382 return ContinueWithoutChild(key); | 382 return ContinueWithoutChild(key); |
| 383 | 383 |
| 384 EntryImpl* child = static_cast<EntryImpl*>(child_); | 384 EntryImpl* child = static_cast<EntryImpl*>(child_); |
| 385 if (!(CHILD_ENTRY & child->GetEntryFlags()) || | 385 if (!(CHILD_ENTRY & child->GetEntryFlags()) || |
| 386 child->GetDataSize(kSparseIndex) < | 386 child->GetDataSize(kSparseIndex) < |
| (...skipping 24 matching lines...) Expand all Loading... |
| 411 | 411 |
| 412 void SparseControl::CloseChild() { | 412 void SparseControl::CloseChild() { |
| 413 scoped_refptr<net::WrappedIOBuffer> buf = | 413 scoped_refptr<net::WrappedIOBuffer> buf = |
| 414 new net::WrappedIOBuffer(reinterpret_cast<char*>(&child_data_)); | 414 new net::WrappedIOBuffer(reinterpret_cast<char*>(&child_data_)); |
| 415 | 415 |
| 416 // Save the allocation bitmap before closing the child entry. | 416 // Save the allocation bitmap before closing the child entry. |
| 417 int rv = child_->WriteData(kSparseIndex, 0, buf, sizeof(child_data_), | 417 int rv = child_->WriteData(kSparseIndex, 0, buf, sizeof(child_data_), |
| 418 NULL, false); | 418 NULL, false); |
| 419 if (rv != sizeof(child_data_)) | 419 if (rv != sizeof(child_data_)) |
| 420 DLOG(ERROR) << "Failed to save child data"; | 420 DLOG(ERROR) << "Failed to save child data"; |
| 421 child_->Close(); | 421 child_->Release(); |
| 422 child_ = NULL; | 422 child_ = NULL; |
| 423 } | 423 } |
| 424 | 424 |
| 425 std::string SparseControl::GenerateChildKey() { | 425 std::string SparseControl::GenerateChildKey() { |
| 426 return GenerateChildName(entry_->GetKey(), sparse_header_.signature, | 426 return GenerateChildName(entry_->GetKey(), sparse_header_.signature, |
| 427 offset_ >> 20); | 427 offset_ >> 20); |
| 428 } | 428 } |
| 429 | 429 |
| 430 // We are deleting the child because something went wrong. | 430 // We are deleting the child because something went wrong. |
| 431 bool SparseControl::KillChildAndContinue(const std::string& key, bool fatal) { | 431 bool SparseControl::KillChildAndContinue(const std::string& key, bool fatal) { |
| 432 SetChildBit(false); | 432 SetChildBit(false); |
| 433 child_->Doom(); | 433 child_->DoomImpl(); |
| 434 child_->Close(); | 434 child_->Release(); |
| 435 child_ = NULL; | 435 child_ = NULL; |
| 436 if (fatal) { | 436 if (fatal) { |
| 437 result_ = net::ERR_CACHE_READ_FAILURE; | 437 result_ = net::ERR_CACHE_READ_FAILURE; |
| 438 return false; | 438 return false; |
| 439 } | 439 } |
| 440 return ContinueWithoutChild(key); | 440 return ContinueWithoutChild(key); |
| 441 } | 441 } |
| 442 | 442 |
| 443 // We were not able to open this child; see what we can do. | 443 // We were not able to open this child; see what we can do. |
| 444 bool SparseControl::ContinueWithoutChild(const std::string& key) { | 444 bool SparseControl::ContinueWithoutChild(const std::string& key) { |
| (...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 749 net::CompletionCallback* c = abort_callbacks_[i]; | 749 net::CompletionCallback* c = abort_callbacks_[i]; |
| 750 if (i == abort_callbacks_.size() - 1) | 750 if (i == abort_callbacks_.size() - 1) |
| 751 abort_callbacks_.clear(); | 751 abort_callbacks_.clear(); |
| 752 | 752 |
| 753 entry_->Release(); // Don't touch object after this line. | 753 entry_->Release(); // Don't touch object after this line. |
| 754 c->Run(net::OK); | 754 c->Run(net::OK); |
| 755 } | 755 } |
| 756 } | 756 } |
| 757 | 757 |
| 758 } // namespace disk_cache | 758 } // namespace disk_cache |
| OLD | NEW |