From 9d40dd1fadeea93aa0fe8933e493424a635cfcf7 Mon Sep 17 00:00:00 2001 From: bert hubert Date: Wed, 13 Jun 2018 10:47:50 +0200 Subject: [PATCH] speed up dedup code, use less memory --- pdns/dnspacket.cc | 5 +++-- pdns/dnspacket.hh | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pdns/dnspacket.cc b/pdns/dnspacket.cc index af6af8ea66..c3e3b35bf5 100644 --- a/pdns/dnspacket.cc +++ b/pdns/dnspacket.cc @@ -186,13 +186,14 @@ void DNSPacket::addRecord(const DNSZoneRecord &rr) if(d_compress) { std::string ser = const_cast(rr).dr.d_content->serialize(rr.dr.d_name); - if(d_dedup.count({rr.dr.d_name, ser})) { // might be a dup + auto hash = boost::hash< std::pair >()({rr.dr.d_name, ser}); + if(d_dedup.count(hash)) { // might be a dup for(auto i=d_rrs.begin();i!=d_rrs.end();++i) { if(rr.dr == i->dr) // XXX SUPER SLOW return; } } - d_dedup.insert({rr.dr.d_name, ser}); + d_dedup.insert(hash); } d_rrs.push_back(rr); diff --git a/pdns/dnspacket.hh b/pdns/dnspacket.hh index 3264855e4e..9d421e3560 100644 --- a/pdns/dnspacket.hh +++ b/pdns/dnspacket.hh @@ -175,7 +175,7 @@ private: string d_tsigprevious; vector d_rrs; // 8 - std::unordered_set, boost::hash< std::pair > > d_dedup; + std::unordered_set d_dedup; string d_rawpacket; // this is where everything lives 8 EDNSSubnetOpts d_eso; -- 2.47.2