Remove QsLog destinations when they are destroyed.
This fixes some issues where MultiMC was segfaulting on exit because things were trying to write to the logger while they were being destroyed, but the destinations had already been destroyed and were left in the list.
This commit is contained in:
parent
35ec599730
commit
f3fffd5259
@ -134,4 +134,9 @@ void Logger::write(const QString &message)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Logger::removeDestination(Destination* destination)
|
||||||
|
{
|
||||||
|
d->destList.removeAll(destination);
|
||||||
|
}
|
||||||
|
|
||||||
} // end namespace
|
} // end namespace
|
||||||
|
@ -54,6 +54,8 @@ public:
|
|||||||
|
|
||||||
//! Adds a log message destination. Don't add null destinations.
|
//! Adds a log message destination. Don't add null destinations.
|
||||||
void addDestination(Destination *destination);
|
void addDestination(Destination *destination);
|
||||||
|
//! Removes the given destination from the logger.
|
||||||
|
void removeDestination(Destination* destination);
|
||||||
//! Logging at a level < 'newLevel' will be ignored
|
//! Logging at a level < 'newLevel' will be ignored
|
||||||
void setLoggingLevel(Level newLevel);
|
void setLoggingLevel(Level newLevel);
|
||||||
//! The default level is INFO
|
//! The default level is INFO
|
||||||
@ -127,4 +129,4 @@ private:
|
|||||||
QsLogging::Logger::Helper(QsLogging::ErrorLevel).stream() << __FILE__ << '@' << __LINE__
|
QsLogging::Logger::Helper(QsLogging::ErrorLevel).stream() << __FILE__ << '@' << __LINE__
|
||||||
#define QLOG_FATAL() \
|
#define QLOG_FATAL() \
|
||||||
QsLogging::Logger::Helper(QsLogging::FatalLevel).stream() << __FILE__ << '@' << __LINE__
|
QsLogging::Logger::Helper(QsLogging::FatalLevel).stream() << __FILE__ << '@' << __LINE__
|
||||||
*/
|
*/
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#include "QsLogDest.h"
|
#include "QsLogDest.h"
|
||||||
#include "QsDebugOutput.h"
|
#include "QsDebugOutput.h"
|
||||||
|
#include "QsLog.h"
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QTextStream>
|
#include <QTextStream>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
@ -32,6 +33,12 @@
|
|||||||
namespace QsLogging
|
namespace QsLogging
|
||||||
{
|
{
|
||||||
|
|
||||||
|
Destination::~Destination()
|
||||||
|
{
|
||||||
|
Logger::instance().removeDestination(this);
|
||||||
|
QsDebugOutput::output("Removed logger destination.");
|
||||||
|
}
|
||||||
|
|
||||||
//! file message sink
|
//! file message sink
|
||||||
class FileDestination : public Destination
|
class FileDestination : public Destination
|
||||||
{
|
{
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
class QString;
|
class QString;
|
||||||
|
|
||||||
namespace QsLogging
|
namespace QsLogging
|
||||||
@ -34,9 +35,7 @@ namespace QsLogging
|
|||||||
class Destination
|
class Destination
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~Destination()
|
virtual ~Destination();
|
||||||
{
|
|
||||||
}
|
|
||||||
virtual void write(const QString &message) = 0;
|
virtual void write(const QString &message) = 0;
|
||||||
};
|
};
|
||||||
typedef std::shared_ptr<Destination> DestinationPtr;
|
typedef std::shared_ptr<Destination> DestinationPtr;
|
||||||
|
Loading…
Reference in New Issue
Block a user