]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Use std::pair and an ordered_unique
authorRobin Geuze <robing@transip.nl>
Fri, 19 Mar 2021 12:56:37 +0000 (13:56 +0100)
committerRobin Geuze <robing@transip.nl>
Wed, 24 Mar 2021 10:10:36 +0000 (11:10 +0100)
pdns/communicator.hh
pdns/slavecommunicator.cc

index 5ab76fc29292ba8185eb0ca4d6bea2f15b0a246b..384ae2c669b2975422463aaa6501069034e7fa2a 100644 (file)
@@ -46,31 +46,20 @@ struct SuckRequest
   DNSName domain;
   ComboAddress master;
   bool force;
-  uint8_t priority;
-  uint64_t sortHelper;
+  std::pair<uint8_t, uint64_t> priorityAndOrder;
   bool operator<(const SuckRequest& b) const
   {
     return tie(domain, master) < tie(b.domain, b.master);
   }
 };
 
-struct suckQueueCmp
-{
-  bool operator()(const SuckRequest& a, const SuckRequest& b) const {
-    if (a.priority == b.priority) {
-      return a.sortHelper < b.sortHelper;
-    }
-    return a.priority < b.priority;
-  };
-};
-
 struct IDTag{};
 struct QueueTag{};
 
 typedef multi_index_container<
   SuckRequest,
   indexed_by<
-    ordered_non_unique<tag<QueueTag>, identity<SuckRequest>, suckQueueCmp>,
+    ordered_unique<tag<QueueTag>, member<SuckRequest,std::pair<uint8_t,uint64_t>,&SuckRequest::priorityAndOrder>>,
     ordered_unique<tag<IDTag>, identity<SuckRequest> >
   >
 > UniQueue;
index 54e7511172d1d9697cd95daa4abf5ff5aa171114..9197c649cd02938c1c58c5eab75836fd57f7814a 100644 (file)
@@ -55,8 +55,8 @@ void CommunicatorClass::addSuckRequest(const DNSName &domain, const ComboAddress
   sr.domain = domain;
   sr.master = master;
   sr.force = force;
-  sr.priority = priority;
-  sr.sortHelper = d_sorthelper++;
+  sr.priorityAndOrder.first = priority;
+  sr.priorityAndOrder.second = d_sorthelper++;
   pair<UniQueue::iterator, bool>  res;
 
   res=d_suckdomains.insert(sr);
@@ -70,10 +70,9 @@ void CommunicatorClass::addSuckRequest(const DNSName &domain, const ComboAddress
       // bit weird, but ok
       return;
     }
-    nameindex.modify(iter, [priority = priority, sorthelper = sr.sortHelper] (SuckRequest& so) {
-      if (priority < so.priority) {
-        so.priority = priority;
-        so.sortHelper = sorthelper;
+    nameindex.modify(iter, [priorityAndOrder = sr.priorityAndOrder] (SuckRequest& so) {
+      if (priorityAndOrder.first < so.priorityAndOrder.first) {
+        so.priorityAndOrder = priorityAndOrder;
       }
     });
   }