]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Prevent copies when updating the State Holder
authorRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 18 Nov 2019 09:12:46 +0000 (10:12 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 18 Nov 2019 09:12:46 +0000 (10:12 +0100)
pdns/dnsdist-dynblocks.hh
pdns/dnsdist-lua-actions.cc
pdns/dnsdist-lua-rules.cc

index dd834a1655bbb41776fb9b4e061cff6c3112e430..af7e38b5fe75293e01a43dab3f10dde7fb8408ae 100644 (file)
@@ -282,7 +282,7 @@ public:
     }
 
     if (updated && blocks) {
-      g_dynblockNMG.setState(*blocks);
+      g_dynblockNMG.setState(std::move(*blocks));
     }
 
     if (!statNodeRoot.empty()) {
@@ -312,7 +312,7 @@ public:
           addOrRefreshBlockSMT(smtBlocks, now, name, d_suffixMatchRule, updated);
         }
         if (updated) {
-          g_dynblockSMT.setState(smtBlocks);
+          g_dynblockSMT.setState(std::move(smtBlocks));
         }
       }
     }
index 3cc60124c799e62a7f7e2e744f501abb50f79ff8..c6e904d414ebb677ab197365bade1664afb59302 100644 (file)
@@ -1173,7 +1173,7 @@ private:
 };
 
 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, luadnsrule_t& var, std::shared_ptr<ActionT>& action, boost::optional<luaruleparams_t>& params) {
   setLuaSideEffect();
 
   boost::uuids::uuid uuid;
@@ -1181,8 +1181,8 @@ static void addAction(GlobalStateHolder<vector<T> > *someRulActions, luadnsrule_
   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});
     });
 }
 
@@ -1194,7 +1194,7 @@ void setupLuaActions()
       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);
     });
 
index f86acf4b2b5c170a91ea07c4767e7eb086563bcb..923c0fabfdc98c58b1fa074a0570c6b661b2392f 100644 (file)
@@ -143,7 +143,7 @@ static void rmRule(GlobalStateHolder<vector<T> > *someRulActions, boost::variant
     }
     rules.erase(rules.begin()+*pos);
   }
-  someRulActions->setState(rules);
+  someRulActions->setState(std::move(rules));
 }
 
 template<typename T>
@@ -155,7 +155,7 @@ static void topRule(GlobalStateHolder<vector<T> > *someRulActions) {
   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>
@@ -175,7 +175,7 @@ static void mvRule(GlobalStateHolder<vector<T> > *someRespRulActions, unsigned i
       --to;
     rules.insert(rules.begin()+to, subject);
   }
-  someRespRulActions->setState(rules);
+  someRespRulActions->setState(std::move(rules));
 }
 
 void setupLuaRules()
@@ -259,7 +259,7 @@ 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});
             }
           }
         });