]> git.ipfire.org Git - thirdparty/snapper.git/commitdiff
- fixed logging during shutdown
authorArvin Schnell <aschnell@suse.de>
Mon, 23 Jul 2018 18:56:32 +0000 (20:56 +0200)
committerArvin Schnell <aschnell@suse.de>
Mon, 23 Jul 2018 18:56:32 +0000 (20:56 +0200)
VERSION
package/snapper.changes
snapper/Logger.cc

diff --git a/VERSION b/VERSION
index d1d899fa33a086e4d8e1de8bcdc160a6e84e17ee..b49b25336d4748652e200792129dc347ee8926e2 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.5.5
+0.5.6
index 808c45a5053512ed6f6efa10499f64d7799bf5fb..336c2e44e29d049e4ea8357910a07337c9d5a5be 100644 (file)
@@ -1,3 +1,10 @@
+-------------------------------------------------------------------
+Mon Jul 23 20:52:26 CEST 2018 - aschnell@suse.com
+
+- fixed logging during shutdown of snapperd to avoid core dumps
+  (bsc#1096401 and others)
+- version 0.5.6
+
 -------------------------------------------------------------------
 Mon May 28 10:44:49 CEST 2018 - aschnell@suse.com
 
index 817a3ccaa8f17b39b4ed6ca6e36fcb7ef2bd13fc..71d72af4a0d64267c8288b0ad56be88c4e23e5fe 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) [2004-2013] Novell, Inc.
+ * Copyright (c) 2018 SUSE LLC
  *
  * All Rights Reserved.
  *
@@ -37,10 +38,25 @@ namespace snapper
     using namespace std;
 
 
-    // Use a pointer to avoid a global destructor. Otherwise the Snapper
-    // destructor in Factory.cc can be called after when logging does not work
-    // anymore. TODO: nicer solution.
-    string* filename = new string("/var/log/snapper.log");
+    namespace
+    {
+
+       struct LoggerData
+       {
+           LoggerData() : filename("/var/log/snapper.log"), mutex() {}
+
+           string filename;
+           boost::mutex mutex;
+       };
+
+
+       // Use pointer to avoid a global destructor. Otherwise other global
+       // destructors using logging can cause errors.
+
+       LoggerData* logger_data = new LoggerData();
+
+    }
+
 
     LogDo log_do = NULL;
     LogQuery log_query = NULL;
@@ -69,11 +85,9 @@ namespace snapper
        string prefix = sformat("%s %s libsnapper(%d) %s(%s):%d", datetime(time(0), false, true).c_str(),
                                ln[level], getpid(), file, func, line);
 
-       static boost::mutex mutex;
-
-       boost::lock_guard<boost::mutex> lock(mutex);
+       boost::lock_guard<boost::mutex> lock(logger_data->mutex);
 
-       FILE* f = fopen(filename->c_str(), "ae");
+       FILE* f = fopen(logger_data->filename.c_str(), "ae");
        if (f)
        {
            string tmp = text;
@@ -137,8 +151,7 @@ namespace snapper
     void
     initDefaultLogger()
     {
-       delete filename;
-       filename = new string("/var/log/snapper.log");
+       logger_data->filename = "/var/log/snapper.log";
 
        if (geteuid())
        {
@@ -152,8 +165,7 @@ namespace snapper
            {
                memset(pwd.pw_passwd, 0, strlen(pwd.pw_passwd));
 
-               delete filename;
-               filename = new string(string(pwd.pw_dir) + "/.snapper.log");
+               logger_data->filename = string(pwd.pw_dir) + "/.snapper.log";
            }
        }