Chromium Code Reviews| Index: net/base/cert_verifier.cc |
| =================================================================== |
| --- net/base/cert_verifier.cc (revision 69550) |
| +++ net/base/cert_verifier.cc (working copy) |
| @@ -109,6 +109,8 @@ |
| delete this; |
| } |
| + bool canceled() const { return !callback_; } |
| + |
| private: |
| CompletionCallback* callback_; |
| CertVerifyResult* verify_result_; |
| @@ -236,8 +238,10 @@ |
| } |
| ~CertVerifierJob() { |
| - if (worker_) |
| + if (worker_) { |
| worker_->Cancel(); |
| + DeleteAllCanceled(); |
| + } |
| } |
| void AddRequest(CertVerifierRequest* request) { |
| @@ -261,6 +265,17 @@ |
| } |
| } |
| + void DeleteAllCanceled() { |
| + for (std::vector<CertVerifierRequest*>::iterator |
| + i = requests_.begin(); i != requests_.end(); i++) { |
| + if ((*i)->canceled()) { |
| + delete *i; |
| + } else { |
| + LOG(DFATAL) << "CertVerifierRequest leaked!"; |
| + } |
| + } |
| + } |
| + |
| std::vector<CertVerifierRequest*> requests_; |
| CertVerifierWorker* worker_; |
| }; |
| @@ -328,14 +343,14 @@ |
| CertVerifierWorker* worker = new CertVerifierWorker(cert, hostname, flags, |
| this); |
| job = new CertVerifierJob(worker); |
| - inflight_.insert(std::make_pair(key, job)); |
| if (!worker->Start()) { |
| - inflight_.erase(key); |
| delete job; |
| delete worker; |
| *out_req = NULL; |
| - return ERR_FAILED; // TODO(wtc): Log an error message. |
| + LOG(ERROR) << "CertVerifierWorker couldn't be started."; |
| + return ERR_FAILED; |
|
willchan no longer on Chromium
2011/01/04 21:33:54
Is this ERR_FAILED ok? I don't know if we can cho
|
| } |
| + inflight_.insert(std::make_pair(key, job)); |
| } |
| CertVerifierRequest* request = |