Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(529)

Unified Diff: net/quic/core/crypto/quic_crypto_server_config.cc

Issue 2561913003: Create a QUIC wrapper around a mutex and a mutex lock. (Closed)
Patch Set: fix Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/core/crypto/quic_crypto_server_config.h ('k') | net/quic/platform/api/quic_mutex.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/core/crypto/quic_crypto_server_config.cc
diff --git a/net/quic/core/crypto/quic_crypto_server_config.cc b/net/quic/core/crypto/quic_crypto_server_config.cc
index fc4c8ad08fa677f860bf428b339faae8b50b677c..8599b77c8acf3db715ca6f959ce9785f4ab03074 100644
--- a/net/quic/core/crypto/quic_crypto_server_config.cc
+++ b/net/quic/core/crypto/quic_crypto_server_config.cc
@@ -311,7 +311,7 @@ CryptoHandshakeMessage* QuicCryptoServerConfig::AddConfig(
}
{
- base::AutoLock locked(configs_lock_);
+ QuicWriterMutexLock locked(&configs_lock_);
if (configs_.find(config->id) != configs_.end()) {
LOG(WARNING) << "Failed to add config because another with the same "
"server config id already exists: "
@@ -361,7 +361,7 @@ bool QuicCryptoServerConfig::SetConfigs(
} else {
VLOG(1) << "Updating configs:";
- base::AutoLock locked(configs_lock_);
+ QuicWriterMutexLock locked(&configs_lock_);
ConfigMap new_configs;
for (std::vector<scoped_refptr<Config>>::const_iterator i =
@@ -409,7 +409,7 @@ void QuicCryptoServerConfig::SetSourceAddressTokenKeys(
}
void QuicCryptoServerConfig::GetConfigIds(std::vector<string>* scids) const {
- base::AutoLock locked(configs_lock_);
+ QuicReaderMutexLock locked(&configs_lock_);
for (ConfigMap::const_iterator it = configs_.begin(); it != configs_.end();
++it) {
scids->push_back(it->first);
@@ -436,7 +436,7 @@ void QuicCryptoServerConfig::ValidateClientHello(
scoped_refptr<Config> requested_config;
scoped_refptr<Config> primary_config;
{
- base::AutoLock locked(configs_lock_);
+ QuicReaderMutexLock locked(&configs_lock_);
if (!primary_config_.get()) {
result->error_code = QUIC_CRYPTO_INTERNAL_ERROR;
@@ -444,9 +444,13 @@ void QuicCryptoServerConfig::ValidateClientHello(
} else {
if (!next_config_promotion_time_.IsZero() &&
next_config_promotion_time_.IsAfter(now)) {
+ configs_lock_.ReaderUnlock();
+ configs_lock_.WriterLock();
SelectNewPrimaryConfig(now);
DCHECK(primary_config_.get());
DCHECK_EQ(configs_.find(primary_config_->id)->second, primary_config_);
+ configs_lock_.WriterUnlock();
+ configs_lock_.ReaderLock();
}
}
@@ -629,16 +633,20 @@ void QuicCryptoServerConfig::ProcessClientHello(
scoped_refptr<Config> primary_config;
bool no_primary_config = false;
{
- base::AutoLock locked(configs_lock_);
+ QuicReaderMutexLock locked(&configs_lock_);
if (!primary_config_) {
no_primary_config = true;
} else {
if (!next_config_promotion_time_.IsZero() &&
next_config_promotion_time_.IsAfter(now)) {
+ configs_lock_.ReaderUnlock();
+ configs_lock_.WriterLock();
SelectNewPrimaryConfig(now);
DCHECK(primary_config_.get());
DCHECK_EQ(configs_.find(primary_config_->id)->second, primary_config_);
+ configs_lock_.WriterUnlock();
+ configs_lock_.ReaderLock();
}
// Use the config that the client requested in order to do key-agreement.
@@ -995,9 +1003,7 @@ void QuicCryptoServerConfig::ProcessClientHelloAfterGetProof(
scoped_refptr<QuicCryptoServerConfig::Config>
QuicCryptoServerConfig::GetConfigWithScid(StringPiece requested_scid) const {
- // In Chromium, we will dead lock if the lock is held by the current thread.
- // Chromium doesn't have AssertReaderHeld API call.
- // configs_lock_.AssertReaderHeld();
+ configs_lock_.AssertReaderHeld();
if (!requested_scid.empty()) {
ConfigMap::const_iterator it = configs_.find(requested_scid.as_string());
@@ -1346,7 +1352,7 @@ bool QuicCryptoServerConfig::BuildServerConfigUpdateMessage(
QuicWallTime expiry_time = QuicWallTime::Zero();
const CommonCertSets* common_cert_sets;
{
- base::AutoLock locked(configs_lock_);
+ QuicReaderMutexLock locked(&configs_lock_);
serialized = primary_config_->serialized;
common_cert_sets = primary_config_->common_cert_sets;
expiry_time = primary_config_->expiry_time;
@@ -1403,7 +1409,7 @@ void QuicCryptoServerConfig::BuildServerConfigUpdateMessage(
string source_address_token;
const CommonCertSets* common_cert_sets;
{
- base::AutoLock locked(configs_lock_);
+ QuicReaderMutexLock locked(&configs_lock_);
serialized = primary_config_->serialized;
common_cert_sets = primary_config_->common_cert_sets;
source_address_token = NewSourceAddressToken(
@@ -1815,7 +1821,7 @@ void QuicCryptoServerConfig::set_enable_serving_sct(bool enable_serving_sct) {
void QuicCryptoServerConfig::AcquirePrimaryConfigChangedCb(
std::unique_ptr<PrimaryConfigChangedCallback> cb) {
- base::AutoLock locked(configs_lock_);
+ QuicWriterMutexLock locked(&configs_lock_);
primary_config_changed_cb_ = std::move(cb);
}
@@ -1858,7 +1864,7 @@ string QuicCryptoServerConfig::NewSourceAddressToken(
}
int QuicCryptoServerConfig::NumberOfConfigs() const {
- base::AutoLock locked(configs_lock_);
+ QuicReaderMutexLock locked(&configs_lock_);
return configs_.size();
}
« no previous file with comments | « net/quic/core/crypto/quic_crypto_server_config.h ('k') | net/quic/platform/api/quic_mutex.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698