]> granicus.if.org Git - pdns/commitdiff
rec: Copy the cached protobuf message instead of creating a new one
authorRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 7 Aug 2018 10:02:21 +0000 (12:02 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 2 Nov 2018 15:55:54 +0000 (16:55 +0100)
(cherry picked from commit 80b94844f488b5acfc41a4aaf33640d63d076b11)

pdns/protobuf.cc
pdns/protobuf.hh
pdns/recpacketcache.cc

index a726e2c599ef6954482eb012795151ce91c184dd..37fb01e8b143b518b2908433c7de6eb375199016 100644 (file)
@@ -337,4 +337,9 @@ DNSProtoBufMessage::DNSProtoBufMessage(DNSProtoBufMessageType type, const boost:
   setQuestion(domain, qtype, qclass);
 }
 
+void DNSProtoBufMessage::copyFrom(const DNSProtoBufMessage& msg)
+{
+  d_message.CopyFrom(msg.d_message);
+}
+
 #endif /* HAVE_PROTOBUF */
index 42491bc87f2fa20a7f026b486ae00129eda9b785..fc070acb982866ce3911c79cb3b0d8bacc4b6261 100644 (file)
@@ -80,6 +80,7 @@ public:
   void update(const boost::uuids::uuid& uuid, const ComboAddress* requestor, const ComboAddress* responder, bool isTCP, uint16_t id);
   void setUUID(const boost::uuids::uuid& uuid);
   void setInitialRequestID(const boost::uuids::uuid& uuid);
+  void copyFrom(const DNSProtoBufMessage& msg);
 
 protected:
   PBDNSMessage d_message;
index 6faf00ae641f9a736acd344c7fba5701d7beffd4..102b022510fade3e5e1ee656ad90245a841256b4 100644 (file)
@@ -77,7 +77,7 @@ bool RecursorPacketCache::checkResponseMatches(std::pair<packetCache_t::index<Ha
 #ifdef HAVE_PROTOBUF
       if (protobufMessage) {
         if (iter->d_protobufMessage) {
-          *protobufMessage = *(iter->d_protobufMessage);
+          protobufMessage->copyFrom(*(iter->d_protobufMessage));
         }
         else {
           *protobufMessage = RecProtoBufMessage(DNSProtoBufMessage::DNSProtoBufMessageType::Response);