void DNSCryptContext::addNewCertificate(std::shared_ptr<DNSCryptCertificatePair>& newCert, bool reload)
{
- auto certs = d_certs.lock();
+ auto certs = d_certs.write_lock();
for (auto pair : *certs) {
if (pair->cert.getSerial() == newCert->cert.getSerial()) {
auto newPair = DNSCryptContext::loadCertificatePair(certFile, keyFile);
newPair->active = active;
addNewCertificate(newPair, reload);
- d_certKeyPaths.lock()->push_back({certFile, keyFile});
+ d_certKeyPaths.write_lock()->push_back({certFile, keyFile});
}
void DNSCryptContext::reloadCertificates()
}
{
- *(d_certs.lock()) = std::move(newCerts);
+ *(d_certs.write_lock()) = std::move(newCerts);
}
}
void DNSCryptContext::markActive(uint32_t serial)
{
- for (auto pair : *d_certs.lock()) {
+ for (auto pair : *d_certs.write_lock()) {
if (pair->active == false && pair->cert.getSerial() == serial) {
pair->active = true;
return;
void DNSCryptContext::markInactive(uint32_t serial)
{
- for (auto pair : *d_certs.lock()) {
+ for (auto pair : *d_certs.write_lock()) {
if (pair->active == true && pair->cert.getSerial() == serial) {
pair->active = false;
return;
void DNSCryptContext::removeInactiveCertificate(uint32_t serial)
{
- auto certs = d_certs.lock();
+ auto certs = d_certs.write_lock();
for (auto it = certs->begin(); it != certs->end(); ) {
if ((*it)->active == false && (*it)->cert.getSerial() == serial) {
auto& shard = d_shards.at(shardIndex);
if (d_deferrableInsertLock) {
- auto w = shard.d_map.try_lock();
+ auto w = shard.d_map.try_write_lock();
if (!w.owns_lock()) {
d_deferredInserts++;
insertLocked(shard, *w, key, newValue);
}
else {
- auto w = shard.d_map.lock();
+ auto w = shard.d_map.write_lock();
insertLocked(shard, *w, key, newValue);
}
size_t removed = 0;
for (auto& shard : d_shards) {
- auto map = shard.d_map.lock();
+ auto map = shard.d_map.write_lock();
if (map->size() <= maxPerShard) {
continue;
}
size_t removed = 0;
for (auto& shard : d_shards) {
- auto map = shard.d_map.lock();
+ auto map = shard.d_map.write_lock();
if (map->size() <= maxPerShard) {
continue;
size_t removed = 0;
for (auto& shard : d_shards) {
- auto map = shard.d_map.lock();
+ auto map = shard.d_map.write_lock();
for(auto it = map->begin(); it != map->end(); ) {
const CacheValue& value = it->second;
void setSize(size_t maxSize)
{
- d_map.lock()->reserve(maxSize);
+ d_map.write_lock()->reserve(maxSize);
}
SharedLockGuarded<std::unordered_map<uint32_t,CacheValue>> d_map;
{
std::string qname;
- auto records = g_qcount.records.lock();
+ auto records = g_qcount.records.write_lock();
for (const auto &record : *records) {
qname = record.first;
boost::replace_all(qname, ".", "_");
luaCtx.writeFunction("clearQueryCounters", []() {
unsigned int size{0};
{
- auto records = g_qcount.records.lock();
+ auto records = g_qcount.records.write_lock();
size = records->size();
records->clear();
}
}
if (countQuery) {
- auto records = g_qcount.records.lock();
+ auto records = g_qcount.records.write_lock();
if (!records->count(qname)) {
(*records)[qname] = 0;
}
{
vinfolog("Computing hashes for id=%s and weight=%d", id, weight);
auto w = weight;
- auto lockedHashes = hashes.lock();
+ auto lockedHashes = hashes.write_lock();
lockedHashes->clear();
lockedHashes->reserve(w);
while (w > 0) {
void ServerPool::addServer(shared_ptr<DownstreamState>& server)
{
- auto servers = d_servers.lock();
+ auto servers = d_servers.write_lock();
/* we can't update the content of the shared pointer directly even when holding the lock,
as other threads might hold a copy. We can however update the pointer as long as we hold the lock. */
unsigned int count = static_cast<unsigned int>((*servers)->size());
void ServerPool::removeServer(shared_ptr<DownstreamState>& server)
{
- auto servers = d_servers.lock();
+ auto servers = d_servers.write_lock();
/* we can't update the content of the shared pointer directly even when holding the lock,
as other threads might hold a copy. We can however update the pointer as long as we hold the lock. */
auto newServers = std::make_shared<ServerPolicy::NumberedServerVector>(*(*servers));
{
auto newCDB = std::unique_ptr<CDB>(new CDB(d_fname));
{
- *(d_cdb.lock()) = std::move(newCDB);
+ *(d_cdb.write_lock()) = std::move(newCDB);
}
d_mtime = st.st_mtime;
return true;
{
// think twice before adding templates here
if (ca.sin4.sin_family == AF_INET) {
- auto res = d_ip4s.lock()->insert({ca.sin4.sin_addr.s_addr, ttd});
+ auto res = d_ip4s.write_lock()->insert({ca.sin4.sin_addr.s_addr, ttd});
if (!res.second && (time_t)res.first->second < ttd) {
res.first->second = (uint32_t)ttd;
}
}
else {
- auto res = d_ip6s.lock()->insert({{ca}, ttd});
+ auto res = d_ip6s.write_lock()->insert({{ca}, ttd});
if (!res.second && (time_t)res.first->second < ttd) {
res.first->second = (uint32_t)ttd;
}
void remove(const ComboAddress& ca)
{
if (ca.sin4.sin_family == AF_INET) {
- d_ip4s.lock()->erase(ca.sin4.sin_addr.s_addr);
+ d_ip4s.write_lock()->erase(ca.sin4.sin_addr.s_addr);
}
else {
- d_ip6s.lock()->erase({ca});
+ d_ip6s.write_lock()->erase({ca});
}
}
void clear()
{
- d_ip4s.lock()->clear();
- d_ip6s.lock()->clear();
+ d_ip4s.write_lock()->clear();
+ d_ip6s.write_lock()->clear();
}
void cleanup()
{
time_t now = time(nullptr);
{
- auto ip4s = d_ip4s.lock();
+ auto ip4s = d_ip4s.write_lock();
for (auto iter = ip4s->begin(); iter != ip4s->end(); ) {
if (iter->second < now) {
iter = ip4s->erase(iter);
}
{
- auto ip6s = d_ip6s.lock();
+ auto ip6s = d_ip6s.write_lock();
for (auto iter = ip6s->begin(); iter != ip6s->end(); ) {
if (iter->second < now) {
iter = ip6s->erase(iter);
OpenSSLTLSTicketKeysRing::OpenSSLTLSTicketKeysRing(size_t capacity)
{
- d_ticketKeys.lock()->set_capacity(capacity);
+ d_ticketKeys.write_lock()->set_capacity(capacity);
}
OpenSSLTLSTicketKeysRing::~OpenSSLTLSTicketKeysRing()
void OpenSSLTLSTicketKeysRing::addKey(std::shared_ptr<OpenSSLTLSTicketKey> newKey)
{
- d_ticketKeys.lock()->push_front(newKey);
+ d_ticketKeys.write_lock()->push_front(newKey);
}
std::shared_ptr<OpenSSLTLSTicketKey> OpenSSLTLSTicketKeysRing::getEncryptionKey()
{
}
- SharedLockGuardedTryHolder<T> try_lock()
+ SharedLockGuardedTryHolder<T> try_write_lock()
{
return SharedLockGuardedTryHolder<T>(d_value, d_mutex);
}
- SharedLockGuardedHolder<T> lock()
+ SharedLockGuardedHolder<T> write_lock()
{
return SharedLockGuardedHolder<T>(d_value, d_mutex);
}
auto entry = std::make_shared<LockGuarded<ZoneEntry>>(zone);
{
- auto zones = d_zones.lock();
+ auto zones = d_zones.write_lock();
/* it might have been inserted in the mean time */
auto got = zones->lookup(zone);
if (got && *got) {
void AggressiveNSECCache::removeZoneInfo(const DNSName& zone, bool subzones)
{
- auto zones = d_zones.lock();
+ auto zones = d_zones.write_lock();
if (subzones) {
zones->remove(zone, true);
toLook = toErase * 5;
// we are full, scan at max 5 * toErase entries and stop once we have nuked enough
- auto zones = d_zones.lock();
+ auto zones = d_zones.write_lock();
zones->visit([now, &erased, toErase, toLook, &lookedAt, &emptyEntries](const SuffixMatchTree<std::shared_ptr<LockGuarded<ZoneEntry>>>& node) {
if (!node.d_value || erased > toErase || lookedAt > toLook) {
return;
}
else {
// we are not full, just look through 10% of the cache and nuke everything that is expired
- auto zones = d_zones.lock();
+ auto zones = d_zones.write_lock();
zones->visit([now, &erased, toLook, &lookedAt, &emptyEntries](const SuffixMatchTree<std::shared_ptr<LockGuarded<ZoneEntry>>>& node) {
if (!node.d_value) {
return;
d_entriesCount -= erased;
if (!emptyEntries.empty()) {
- auto zones = d_zones.lock();
+ auto zones = d_zones.write_lock();
for (const auto& entry : emptyEntries) {
zones->remove(entry);
}
auto newKey = std::make_shared<GnuTLSTicketsKey>();
{
- *(d_ticketsKey.lock()) = newKey;
+ *(d_ticketsKey.write_lock()) = newKey;
}
if (d_ticketsKeyRotationDelay > 0) {
auto newKey = std::make_shared<GnuTLSTicketsKey>(file);
{
- *(d_ticketsKey.lock()) = newKey;
+ *(d_ticketsKey.write_lock()) = newKey;
}
if (d_ticketsKeyRotationDelay > 0) {