]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
rec: Avoid raw pointers by using a referrence wrapper inside a variant
authorOtto Moerbeek <otto.moerbeek@open-xchange.com>
Fri, 10 Feb 2023 13:38:34 +0000 (14:38 +0100)
committerOtto Moerbeek <otto.moerbeek@open-xchange.com>
Wed, 10 Jan 2024 13:45:53 +0000 (14:45 +0100)
pdns/logger.hh
pdns/recursordist/syncres.cc

index 2b01700382aa80b10d742090dc171422e27c656d..37216584dc3a9304e21a434ee377dcdb02d792d5 100644 (file)
@@ -177,32 +177,32 @@ struct LogVariant
 {
   string prefix;
   timeval start;
-  // variant cannot hold references
-  std::variant<Logger*, ostringstream*> v;
+  // variant cannot hold references directly, use a wrapper
+  std::variant<std::reference_wrapper<Logger>, std::reference_wrapper<ostringstream>> v;
 };
 
 using OptLog = std::optional<LogVariant>;
 
 void addTraceTS(const timeval& start, ostringstream& str);
 
-#define VLOG(log, x)                                                       \
-  if (log) {                                                               \
-    if (std::holds_alternative<Logger*>((log)->v)) {                       \
-      *std::get<Logger*>(log->v) << Logger::Warning << (log)->prefix << x; \
-    }                                                                      \
-    else if (std::holds_alternative<ostringstream*>((log)->v)) {           \
-      addTraceTS((log)->start, *std::get<ostringstream*>((log)->v));       \
-      *std::get<ostringstream*>((log)->v) << (log)->prefix << x;           \
-    }                                                                      \
+#define VLOG(log, x)                                                    \
+  if (log) {                                                            \
+    if (std::holds_alternative<std::reference_wrapper<Logger>>((log)->v)) { \
+      std::get<std::reference_wrapper<Logger>>((log)->v).get() << Logger::Warning << (log)->prefix << x; \
+    }                                                                   \
+    else if (std::holds_alternative<std::reference_wrapper<ostringstream>>((log)->v)) { \
+      addTraceTS((log)->start, std::get<std::reference_wrapper<ostringstream>>((log)->v).get()); \
+      std::get<std::reference_wrapper<ostringstream>>((log)->v).get() << (log)->prefix << x; \
+    }                                                                   \
   }
 
-#define VLOG_NO_PREFIX(log, x)                                       \
-  if (log) {                                                         \
-    if (std::holds_alternative<Logger*>((log)->v)) {                 \
-      *std::get<Logger*>(log->v) << Logger::Warning << x;            \
-    }                                                                \
-    else if (std::holds_alternative<ostringstream*>((log)->v)) {     \
-      addTraceTS((log)->start, *std::get<ostringstream*>((log)->v)); \
-      *std::get<ostringstream*>((log)->v) << x;                      \
-    }                                                                \
+#define VLOG_NO_PREFIX(log, x)                                          \
+  if (log) {                                                            \
+    if (std::holds_alternative<std::reference_wrapper<Logger>>((log)->v)) { \
+      std::get<std::reference_wrapper<Logger>>((log)->v).get() << Logger::Warning << x; \
+    }                                                                   \
+    else if (std::holds_alternative<std::reference_wrapper<ostringstream>>((log)->v)) { \
+      addTraceTS((log)->start, std::get<std::reference_wrapper<ostringstream>>((log)->v).get()); \
+      std::get<std::reference_wrapper<ostringstream>>((log)->v).get() << x; \
+    }                                                                   \
   }
index ebdfff8ac0d5f3cb13f02a3326e03a96f2d9e9e2..2d6c5b867153ae1c9ce997c1d35fc070b9f7cae3 100644 (file)
@@ -489,10 +489,10 @@ OptLog SyncRes::LogObject(const string& prefix)
 {
   OptLog ret;
   if (d_lm == Log) {
-    ret = {prefix, d_fixednow, &g_log};
+    ret = {prefix, d_fixednow, g_log};
   }
   else if (d_lm == Store) {
-    ret = {prefix, d_fixednow, &d_trace};
+    ret = {prefix, d_fixednow, d_trace};
   }
   return ret;
 }