}
if (updated && blocks) {
- g_dynblockNMG.setState(*blocks);
+ g_dynblockNMG.setState(std::move(*blocks));
}
if (!statNodeRoot.empty()) {
addOrRefreshBlockSMT(smtBlocks, now, name, d_suffixMatchRule, updated);
}
if (updated) {
- g_dynblockSMT.setState(smtBlocks);
+ g_dynblockSMT.setState(std::move(smtBlocks));
}
}
}
};
template<typename T, typename ActionT>
-static void addAction(GlobalStateHolder<vector<T> > *someRulActions, luadnsrule_t var, std::shared_ptr<ActionT> action, boost::optional<luaruleparams_t> params) {
+static void addAction(GlobalStateHolder<vector<T> > *someRulActions, const luadnsrule_t& var, const std::shared_ptr<ActionT>& action, boost::optional<luaruleparams_t>& params) {
setLuaSideEffect();
boost::uuids::uuid uuid;
parseRuleParams(params, uuid, creationOrder);
auto rule=makeRule(var);
- someRulActions->modify([rule, action, uuid, creationOrder](vector<T>& rulactions){
- rulactions.push_back({rule, action, uuid, creationOrder});
+ someRulActions->modify([&rule, &action, &uuid, creationOrder](vector<T>& rulactions){
+ rulactions.push_back({std::move(rule), std::move(action), std::move(uuid), creationOrder});
});
}
parseRuleParams(params, uuid, creationOrder);
auto rule=makeRule(dnsrule);
- DNSDistRuleAction ra({rule, action, uuid, creationOrder});
+ DNSDistRuleAction ra({std::move(rule), action, uuid, creationOrder});
return std::make_shared<DNSDistRuleAction>(ra);
});
}
rules.erase(rules.begin()+*pos);
}
- someRulActions->setState(rules);
+ someRulActions->setState(std::move(rules));
}
template<typename T>
auto subject = *rules.rbegin();
rules.erase(std::prev(rules.end()));
rules.insert(rules.begin(), subject);
- someRulActions->setState(rules);
+ someRulActions->setState(std::move(rules));
}
template<typename T>
--to;
rules.insert(rules.begin()+to, subject);
}
- someRespRulActions->setState(rules);
+ someRespRulActions->setState(std::move(rules));
}
void setupLuaRules()
const auto& newruleaction = pair.second;
if (newruleaction->d_action) {
auto rule=makeRule(newruleaction->d_rule);
- gruleactions.push_back({rule, newruleaction->d_action, newruleaction->d_id, newruleaction->d_creationOrder});
+ gruleactions.push_back({std::move(rule), newruleaction->d_action, newruleaction->d_id, newruleaction->d_creationOrder});
}
}
});
for (const auto &p : parts) {
dontThrottleNames.add(DNSName(p));
}
- g_dontThrottleNames.setState(dontThrottleNames);
+ g_dontThrottleNames.setState(std::move(dontThrottleNames));
NetmaskGroup dontThrottleNetmasks;
stringtok(parts, ::arg()["dont-throttle-netmasks"]);
for (const auto &p : parts) {
dontThrottleNetmasks.addMask(Netmask(p));
}
- g_dontThrottleNetmasks.setState(dontThrottleNetmasks);
+ g_dontThrottleNetmasks.setState(std::move(dontThrottleNetmasks));
}
s_balancingFactor = ::arg().asDouble("distribution-load-factor");
try {
Lua.executeCode(ifs);
- g_luaconfs.setState(lci);
+ g_luaconfs.setState(std::move(lci));
}
catch(const LuaContext::ExecutionErrorException& e) {
g_log<<Logger::Error<<"Unable to load Lua script from '"+fname+"': ";
dnt.add(d);
}
- g_dontThrottleNames.setState(dnt);
+ g_dontThrottleNames.setState(std::move(dnt));
ret += " to the list of nameservers that may not be throttled";
g_log<<Logger::Info<<ret<<", requested via control channel"<<endl;
dnt.addMask(t);
}
- g_dontThrottleNetmasks.setState(dnt);
+ g_dontThrottleNetmasks.setState(std::move(dnt));
ret += " to the list of nameserver netmasks that may not be throttled";
g_log<<Logger::Info<<ret<<", requested via control channel"<<endl;
if (begin + 1 == end && *begin == "*"){
SuffixMatchNode smn;
- g_dontThrottleNames.setState(smn);
+ g_dontThrottleNames.setState(std::move(smn));
string ret = "Cleared list of nameserver names that may not be throttled";
g_log<<Logger::Warning<<ret<<", requested via control channel"<<endl;
return ret + "\n";
dnt.remove(name);
}
- g_dontThrottleNames.setState(dnt);
+ g_dontThrottleNames.setState(std::move(dnt));
ret += " from the list of nameservers that may not be throttled";
g_log<<Logger::Info<<ret<<", requested via control channel"<<endl;
if (begin + 1 == end && *begin == "*"){
auto nmg = g_dontThrottleNetmasks.getCopy();
nmg.clear();
- g_dontThrottleNetmasks.setState(nmg);
+ g_dontThrottleNetmasks.setState(std::move(nmg));
string ret = "Cleared list of nameserver addresses that may not be throttled";
g_log<<Logger::Warning<<ret<<", requested via control channel"<<endl;
dnt.deleteMask(mask);
}
- g_dontThrottleNetmasks.setState(dnt);
+ g_dontThrottleNetmasks.setState(std::move(dnt));
ret += " from the list of nameservers that may not be throttled";
g_log<<Logger::Info<<ret<<", requested via control channel"<<endl;
return LocalStateHolder<T>(this);
}
- void setState(T state) //!< Safely & slowly change the global state
+ void setState(const T& state) //!< Safely & slowly change the global state
{
std::shared_ptr<T> newState = std::make_shared<T>(state);
{
std::lock_guard<std::mutex> l(d_lock);
- d_state = newState;
+ d_state = std::move(newState);
+ d_generation++;
+ }
+ }
+
+ void setState(T&& state) //!< Safely & slowly change the global state
+ {
+ std::shared_ptr<T> newState = std::make_shared<T>(std::move(state));
+ {
+ std::lock_guard<std::mutex> l(d_lock);
+ d_state = std::move(newState);
d_generation++;
}
}
//! Safely & slowly modify the global state
template<typename F>
void modify(F act) {
- std::lock_guard<std::mutex> l(d_lock);
+ std::lock_guard<std::mutex> l(d_lock);
auto state=*d_state; // and yes, these three steps are necessary, can't ever modify state in place, even when locked!
act(state);
- d_state = std::make_shared<T>(state);
+ d_state = std::make_shared<T>(std::move(state));
++d_generation;
}