Updates state order of DiskBasedCertCache::WriteWorker.

It makes more sense to try to open the entries first rather than create them, since they will usually only not exist the first time.

Review URL: https://codereview.chromium.org/465633003

Cr-Commit-Position: refs/heads/master@{#289342}
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@289342 0039d316-1c4b-4281-b951-d872f2087c98
parent 8693ce83
...@@ -81,10 +81,10 @@ class DiskBasedCertCache::WriteWorker { ...@@ -81,10 +81,10 @@ class DiskBasedCertCache::WriteWorker {
private: private:
enum State { enum State {
STATE_CREATE,
STATE_CREATE_COMPLETE,
STATE_OPEN, STATE_OPEN,
STATE_OPEN_COMPLETE, STATE_OPEN_COMPLETE,
STATE_CREATE,
STATE_CREATE_COMPLETE,
STATE_WRITE, STATE_WRITE,
STATE_WRITE_COMPLETE, STATE_WRITE_COMPLETE,
STATE_NONE STATE_NONE
...@@ -93,10 +93,10 @@ class DiskBasedCertCache::WriteWorker { ...@@ -93,10 +93,10 @@ class DiskBasedCertCache::WriteWorker {
void OnIOComplete(int rv); void OnIOComplete(int rv);
int DoLoop(int rv); int DoLoop(int rv);
int DoCreate();
int DoCreateComplete(int rv);
int DoOpen(); int DoOpen();
int DoOpenComplete(int rv); int DoOpenComplete(int rv);
int DoCreate();
int DoCreateComplete(int rv);
int DoWrite(); int DoWrite();
int DoWriteComplete(int rv); int DoWriteComplete(int rv);
...@@ -146,7 +146,8 @@ DiskBasedCertCache::WriteWorker::~WriteWorker() { ...@@ -146,7 +146,8 @@ DiskBasedCertCache::WriteWorker::~WriteWorker() {
void DiskBasedCertCache::WriteWorker::Start() { void DiskBasedCertCache::WriteWorker::Start() {
DCHECK_EQ(STATE_NONE, next_state_); DCHECK_EQ(STATE_NONE, next_state_);
next_state_ = STATE_CREATE;
next_state_ = STATE_OPEN;
int rv = DoLoop(OK); int rv = DoLoop(OK);
if (rv == ERR_IO_PENDING) if (rv == ERR_IO_PENDING)
...@@ -183,18 +184,18 @@ int DiskBasedCertCache::WriteWorker::DoLoop(int rv) { ...@@ -183,18 +184,18 @@ int DiskBasedCertCache::WriteWorker::DoLoop(int rv) {
State state = next_state_; State state = next_state_;
next_state_ = STATE_NONE; next_state_ = STATE_NONE;
switch (state) { switch (state) {
case STATE_CREATE:
rv = DoCreate();
break;
case STATE_CREATE_COMPLETE:
rv = DoCreateComplete(rv);
break;
case STATE_OPEN: case STATE_OPEN:
rv = DoOpen(); rv = DoOpen();
break; break;
case STATE_OPEN_COMPLETE: case STATE_OPEN_COMPLETE:
rv = DoOpenComplete(rv); rv = DoOpenComplete(rv);
break; break;
case STATE_CREATE:
rv = DoCreate();
break;
case STATE_CREATE_COMPLETE:
rv = DoCreateComplete(rv);
break;
case STATE_WRITE: case STATE_WRITE:
rv = DoWrite(); rv = DoWrite();
break; break;
...@@ -210,18 +211,15 @@ int DiskBasedCertCache::WriteWorker::DoLoop(int rv) { ...@@ -210,18 +211,15 @@ int DiskBasedCertCache::WriteWorker::DoLoop(int rv) {
return rv; return rv;
} }
int DiskBasedCertCache::WriteWorker::DoCreate() { int DiskBasedCertCache::WriteWorker::DoOpen() {
next_state_ = STATE_CREATE_COMPLETE; next_state_ = STATE_OPEN_COMPLETE;
return backend_->OpenEntry(key_, &entry_, io_callback_);
return backend_->CreateEntry(key_, &entry_, io_callback_);
} }
int DiskBasedCertCache::WriteWorker::DoCreateComplete(int rv) { int DiskBasedCertCache::WriteWorker::DoOpenComplete(int rv) {
// An error here usually signifies that the entry already exists. // The entry doesn't exist yet, so we should create it.
// If this occurs, it is necessary to instead open the previously
// existing entry.
if (rv < 0) { if (rv < 0) {
next_state_ = STATE_OPEN; next_state_ = STATE_CREATE;
return OK; return OK;
} }
...@@ -229,12 +227,12 @@ int DiskBasedCertCache::WriteWorker::DoCreateComplete(int rv) { ...@@ -229,12 +227,12 @@ int DiskBasedCertCache::WriteWorker::DoCreateComplete(int rv) {
return OK; return OK;
} }
int DiskBasedCertCache::WriteWorker::DoOpen() { int DiskBasedCertCache::WriteWorker::DoCreate() {
next_state_ = STATE_OPEN_COMPLETE; next_state_ = STATE_CREATE_COMPLETE;
return backend_->OpenEntry(key_, &entry_, io_callback_); return backend_->CreateEntry(key_, &entry_, io_callback_);
} }
int DiskBasedCertCache::WriteWorker::DoOpenComplete(int rv) { int DiskBasedCertCache::WriteWorker::DoCreateComplete(int rv) {
if (rv < 0) if (rv < 0)
return rv; return rv;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment