diff options
author | pneubeck@chromium.org <pneubeck@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-03 12:47:44 +0000 |
---|---|---|
committer | pneubeck@chromium.org <pneubeck@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-08-03 12:47:44 +0000 |
commit | d09565c4c0e5277f043328824bf924d9baa34b27 (patch) | |
tree | 374f0c2ad74e82ced9c83e33fd4a5597cf7c31b0 | |
parent | 970167dcbd3612acc143c569fa1c77cd23eaeb3d (diff) | |
download | chromium_src-d09565c4c0e5277f043328824bf924d9baa34b27.zip chromium_src-d09565c4c0e5277f043328824bf924d9baa34b27.tar.gz chromium_src-d09565c4c0e5277f043328824bf924d9baa34b27.tar.bz2 |
Fix ScopedTestNSSDB for older NSS versions.
Before, if NSS version was < 3.15.1, then the ScopedTempDir was destructed without ScopedAllowIO and lead to a thread restriction violation.
Now, the temp dir is not deleted in this case as the NSS DB is left open.
BUG=210525
TBR=rsleevi@chromium.org
Review URL: https://codereview.chromium.org/423363005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@287257 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | crypto/scoped_test_nss_db.cc | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/crypto/scoped_test_nss_db.cc b/crypto/scoped_test_nss_db.cc index a3ff68b..452c26d 100644 --- a/crypto/scoped_test_nss_db.cc +++ b/crypto/scoped_test_nss_db.cc @@ -29,17 +29,22 @@ ScopedTestNSSDB::~ScopedTestNSSDB() { // Don't close when NSS is < 3.15.1, because it would require an additional // sleep for 1 second after closing the database, due to // http://bugzil.la/875601. - if (!NSS_VersionCheck("3.15.1") || !slot_) + if (!NSS_VersionCheck("3.15.1")) { + LOG(ERROR) << "NSS version is < 3.15.1, test DB will not be closed."; + temp_dir_.Take(); return; + } // NSS is allowed to do IO on the current thread since dispatching // to a dedicated thread would still have the affect of blocking // the current thread, due to NSS's internal locking requirements base::ThreadRestrictions::ScopedAllowIO allow_io; - SECStatus status = SECMOD_CloseUserDB(slot_.get()); - if (status != SECSuccess) - PLOG(ERROR) << "SECMOD_CloseUserDB failed: " << PORT_GetError(); + if (slot_) { + SECStatus status = SECMOD_CloseUserDB(slot_.get()); + if (status != SECSuccess) + PLOG(ERROR) << "SECMOD_CloseUserDB failed: " << PORT_GetError(); + } if (!temp_dir_.Delete()) LOG(ERROR) << "Could not delete temporary directory."; |