| Index: net/tools/dump_cache/upgrade.cc
|
| ===================================================================
|
| --- net/tools/dump_cache/upgrade.cc (revision 51874)
|
| +++ net/tools/dump_cache/upgrade.cc (working copy)
|
| @@ -104,7 +104,8 @@
|
| RESULT_OK = 0,
|
| RESULT_UNKNOWN_COMMAND,
|
| RESULT_INVALID_PARAMETER,
|
| - RESULT_NAME_OVERFLOW
|
| + RESULT_NAME_OVERFLOW,
|
| + RESULT_PENDING // This error code is NOT expected by the master process.
|
| };
|
|
|
| // -----------------------------------------------------------------------
|
| @@ -575,6 +576,7 @@
|
| void DoGetNextEntry();
|
| void DoGetPrevEntry();
|
| int32 GetEntryFromList();
|
| + void DoGetEntryComplete(int result);
|
| void DoCloseEntry();
|
| void DoGetKey();
|
| void DoGetUseTimes();
|
| @@ -585,16 +587,19 @@
|
| void Fail();
|
|
|
| void* iterator_;
|
| - Message msg_; // Only used for DoReadDataComplete.
|
| + Message msg_; // Used for DoReadDataComplete and DoGetEntryComplete.
|
|
|
| net::CompletionCallbackImpl<SlaveSM> read_callback_;
|
| + net::CompletionCallbackImpl<SlaveSM> next_callback_;
|
| scoped_ptr<disk_cache::BackendImpl> cache_;
|
| };
|
|
|
| SlaveSM::SlaveSM(const std::wstring& path, HANDLE channel)
|
| : BaseSM(channel), iterator_(NULL),
|
| ALLOW_THIS_IN_INITIALIZER_LIST(
|
| - read_callback_(this, &SlaveSM::DoReadDataComplete)) {
|
| + read_callback_(this, &SlaveSM::DoReadDataComplete)),
|
| + ALLOW_THIS_IN_INITIALIZER_LIST(
|
| + next_callback_(this, &SlaveSM::DoGetEntryComplete)) {
|
| disk_cache::Backend* cache;
|
| TestCompletionCallback cb;
|
| int rv = disk_cache::CreateCacheBackend(net::DISK_CACHE,
|
| @@ -672,6 +677,9 @@
|
| DEBUGMSG("\t\t\tSlave DoInit\n");
|
| DCHECK(state_ == SLAVE_INITIAL);
|
| state_ = SLAVE_WAITING;
|
| + if (!cache_.get())
|
| + return false;
|
| +
|
| return ReceiveMsg();
|
| }
|
|
|
| @@ -700,6 +708,11 @@
|
| msg.result = RESULT_UNKNOWN_COMMAND;
|
| } else {
|
| msg.result = GetEntryFromList();
|
| + if (msg.result == RESULT_PENDING) {
|
| + // We are not done yet.
|
| + msg_ = msg;
|
| + return;
|
| + }
|
| msg.long_arg1 = reinterpret_cast<int64>(entry_);
|
| }
|
| SendMsg(msg);
|
| @@ -715,23 +728,31 @@
|
| if (entry_)
|
| entry_->Close();
|
|
|
| - bool ret;
|
| + int rv;
|
| if (input_->msg.command == GET_NEXT_ENTRY) {
|
| - ret = cache_->OpenNextEntry(&iterator_,
|
| - reinterpret_cast<disk_cache::Entry**>(&entry_));
|
| + rv = cache_->OpenNextEntry(&iterator_,
|
| + reinterpret_cast<disk_cache::Entry**>(&entry_),
|
| + &next_callback_);
|
| } else {
|
| DCHECK(input_->msg.command == GET_PREV_ENTRY);
|
| - ret = cache_->OpenPrevEntry(&iterator_,
|
| - reinterpret_cast<disk_cache::Entry**>(&entry_));
|
| + rv = cache_->OpenPrevEntry(&iterator_,
|
| + reinterpret_cast<disk_cache::Entry**>(&entry_),
|
| + &next_callback_);
|
| }
|
| + DCHECK_EQ(net::ERR_IO_PENDING, rv);
|
| + return RESULT_PENDING;
|
| +}
|
|
|
| - if (!ret)
|
| +void SlaveSM::DoGetEntryComplete(int result) {
|
| + DEBUGMSG("\t\t\tSlave DoGetEntryComplete\n");
|
| + if (result != net::OK) {
|
| entry_ = NULL;
|
| -
|
| - if (!entry_)
|
| DEBUGMSG("\t\t\tSlave end of list\n");
|
| + }
|
|
|
| - return RESULT_OK;
|
| + msg_.result = RESULT_OK;
|
| + msg_.long_arg1 = reinterpret_cast<int64>(entry_);
|
| + SendMsg(msg_);
|
| }
|
|
|
| void SlaveSM::DoCloseEntry() {
|
|
|