+-------------------------------------------------------------------
+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
/*
* Copyright (c) [2004-2013] Novell, Inc.
+ * Copyright (c) 2018 SUSE LLC
*
* All Rights Reserved.
*
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;
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;
void
initDefaultLogger()
{
- delete filename;
- filename = new string("/var/log/snapper.log");
+ logger_data->filename = "/var/log/snapper.log";
if (geteuid())
{
{
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";
}
}