Skip to content

Commit

Permalink
Updates state order of DiskBasedCertCache::WriteWorker.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
brandonsalmon@chromium.org committed Aug 13, 2014
1 parent 8693ce8 commit 7548162
Showing 1 changed file with 22 additions and 24 deletions.
46 changes: 22 additions & 24 deletions net/http/disk_based_cert_cache.cc
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,10 @@ class DiskBasedCertCache::WriteWorker {

private:
enum State {
STATE_CREATE,
STATE_CREATE_COMPLETE,
STATE_OPEN,
STATE_OPEN_COMPLETE,
STATE_CREATE,
STATE_CREATE_COMPLETE,
STATE_WRITE,
STATE_WRITE_COMPLETE,
STATE_NONE
Expand All @@ -93,10 +93,10 @@ class DiskBasedCertCache::WriteWorker {
void OnIOComplete(int rv);
int DoLoop(int rv);

int DoCreate();
int DoCreateComplete(int rv);
int DoOpen();
int DoOpenComplete(int rv);
int DoCreate();
int DoCreateComplete(int rv);
int DoWrite();
int DoWriteComplete(int rv);

Expand Down Expand Up @@ -146,7 +146,8 @@ DiskBasedCertCache::WriteWorker::~WriteWorker() {

void DiskBasedCertCache::WriteWorker::Start() {
DCHECK_EQ(STATE_NONE, next_state_);
next_state_ = STATE_CREATE;

next_state_ = STATE_OPEN;
int rv = DoLoop(OK);

if (rv == ERR_IO_PENDING)
Expand Down Expand Up @@ -183,18 +184,18 @@ int DiskBasedCertCache::WriteWorker::DoLoop(int rv) {
State state = next_state_;
next_state_ = STATE_NONE;
switch (state) {
case STATE_CREATE:
rv = DoCreate();
break;
case STATE_CREATE_COMPLETE:
rv = DoCreateComplete(rv);
break;
case STATE_OPEN:
rv = DoOpen();
break;
case STATE_OPEN_COMPLETE:
rv = DoOpenComplete(rv);
break;
case STATE_CREATE:
rv = DoCreate();
break;
case STATE_CREATE_COMPLETE:
rv = DoCreateComplete(rv);
break;
case STATE_WRITE:
rv = DoWrite();
break;
Expand All @@ -210,31 +211,28 @@ int DiskBasedCertCache::WriteWorker::DoLoop(int rv) {
return rv;
}

int DiskBasedCertCache::WriteWorker::DoCreate() {
next_state_ = STATE_CREATE_COMPLETE;

return backend_->CreateEntry(key_, &entry_, io_callback_);
int DiskBasedCertCache::WriteWorker::DoOpen() {
next_state_ = STATE_OPEN_COMPLETE;
return backend_->OpenEntry(key_, &entry_, io_callback_);
}

int DiskBasedCertCache::WriteWorker::DoCreateComplete(int rv) {
// An error here usually signifies that the entry already exists.
// If this occurs, it is necessary to instead open the previously
// existing entry.
int DiskBasedCertCache::WriteWorker::DoOpenComplete(int rv) {
// The entry doesn't exist yet, so we should create it.
if (rv < 0) {
next_state_ = STATE_OPEN;
next_state_ = STATE_CREATE;
return OK;
}

next_state_ = STATE_WRITE;
return OK;
}

int DiskBasedCertCache::WriteWorker::DoOpen() {
next_state_ = STATE_OPEN_COMPLETE;
return backend_->OpenEntry(key_, &entry_, io_callback_);
int DiskBasedCertCache::WriteWorker::DoCreate() {
next_state_ = STATE_CREATE_COMPLETE;
return backend_->CreateEntry(key_, &entry_, io_callback_);
}

int DiskBasedCertCache::WriteWorker::DoOpenComplete(int rv) {
int DiskBasedCertCache::WriteWorker::DoCreateComplete(int rv) {
if (rv < 0)
return rv;

Expand Down

0 comments on commit 7548162

Please sign in to comment.