If trace is enabled after the last TRACE() statement is run, but
*before* ~Trace() is called, then _file is left as nullptr when
logtrace_output() is called in ~Trace(). This will segfault.
---
 src/base/logtrace.h | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/base/logtrace.h b/src/base/logtrace.h
index 9b20da82d..69379766e 100644
--- a/src/base/logtrace.h
+++ b/src/base/logtrace.h
@@ -175,7 +175,11 @@ extern void log_output(const char *file, unsigned line, 
unsigned priority,
 
 class Trace {
  public:
-  Trace() {}
+  Trace() = delete;
+  Trace(const char *file, const char *function) {
+    file_ = file;
+    function_ = function;
+  }
   ~Trace() {
     if (!trace_leave_called && is_logtrace_enabled(CAT_TRACE_LEAVE)) {
       va_list ap{};
@@ -212,11 +216,11 @@ class Trace {
 };
 
 #define TRACE_ENTER()                                                \
-  Trace t_;                                                          \
+  Trace t_(__FILE__, __FUNCTION__); \
   t_.trace(__FILE__, __FUNCTION__, __LINE__, CAT_TRACE_ENTER, "%s ", \
            __FUNCTION__)
 #define TRACE_ENTER2(format, args...)                                        \
-  Trace t_;                                                                  \
+  Trace t_(__FILE__, __FUNCTION__); \
   t_.trace(__FILE__, __FUNCTION__, __LINE__, CAT_TRACE_ENTER, "%s: " format, \
            __FUNCTION__, ##args)
 
-- 
2.14.1


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to