| Index: net/base/cert_verifier.cc
|
| ===================================================================
|
| --- net/base/cert_verifier.cc (revision 72195)
|
| +++ 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,15 @@
|
| 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.
|
| + // TODO(wtc): log to the NetLog.
|
| + LOG(ERROR) << "CertVerifierWorker couldn't be started.";
|
| + return ERR_INSUFFICIENT_RESOURCES; // Just a guess.
|
| }
|
| + inflight_.insert(std::make_pair(key, job));
|
| }
|
|
|
| CertVerifierRequest* request =
|
|
|