summaryrefslogtreecommitdiff
path: root/Source/Core/Common
diff options
context:
space:
mode:
authordonkopunchstania <donkopunchstania@gmail.com>2010-02-16 04:34:41 +0000
committerdonkopunchstania <donkopunchstania@gmail.com>2010-02-16 04:34:41 +0000
commit9254a2ddb593542f224342d9ff9fd9a072b5cc44 (patch)
tree7cd5417d34f75632cd2e342da5d2017650a4d070 /Source/Core/Common
parent666a33eeedcc3fbfa2ae035ea3afa48c84fe3274 (diff)
Fixed a few memory leaks. Made Init and Shutdown functions for some core systems.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5064 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/Common')
-rw-r--r--Source/Core/Common/Src/CDUtils.cpp1
-rw-r--r--Source/Core/Common/Src/LogManager.cpp22
-rw-r--r--Source/Core/Common/Src/LogManager.h5
3 files changed, 23 insertions, 5 deletions
diff --git a/Source/Core/Common/Src/CDUtils.cpp b/Source/Core/Common/Src/CDUtils.cpp
index f1d7b9bcd4..8339ea85e1 100644
--- a/Source/Core/Common/Src/CDUtils.cpp
+++ b/Source/Core/Common/Src/CDUtils.cpp
@@ -139,6 +139,7 @@ char ** cdio_get_devices_win32() {
const char *drive_str=is_cdrom_win32(drive_letter);
if (drive_str != NULL) {
cdio_add_device_list(&drives, drive_str, &num_drives);
+ delete drive_str;
}
}
cdio_add_device_list(&drives, NULL, &num_drives);
diff --git a/Source/Core/Common/Src/LogManager.cpp b/Source/Core/Common/Src/LogManager.cpp
index 764f761c05..e613f2763d 100644
--- a/Source/Core/Common/Src/LogManager.cpp
+++ b/Source/Core/Common/Src/LogManager.cpp
@@ -26,7 +26,8 @@ void GenericLog(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type,
{
va_list args;
va_start(args, fmt);
- LogManager::GetInstance()->Log(level, type, file, line, fmt, args);
+ if (LogManager::GetInstance())
+ LogManager::GetInstance()->Log(level, type, file, line, fmt, args);
va_end(args);
}
@@ -91,11 +92,14 @@ LogManager::LogManager() {
}
LogManager::~LogManager() {
- delete [] &m_Log; // iffy :P
for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i) {
m_logManager->removeListener((LogTypes::LOG_TYPE)i, m_fileLog);
m_logManager->removeListener((LogTypes::LOG_TYPE)i, m_consoleLog);
}
+
+ for (int i = 0; i < LogTypes::NUMBER_OF_LOGS; ++i)
+ delete m_Log[i];
+
delete m_fileLog;
delete m_consoleLog;
delete logMutex;
@@ -131,6 +135,17 @@ void LogManager::removeListener(LogTypes::LOG_TYPE type, LogListener *listener)
logMutex->Leave();
}
+void LogManager::Init()
+{
+ m_logManager = new LogManager();
+}
+
+void LogManager::Shutdown()
+{
+ delete m_logManager;
+ m_logManager = NULL;
+}
+
LogContainer::LogContainer(const char* shortName, const char* fullName, bool enable)
: m_enable(enable) {
strncpy(m_fullName, fullName, 128);
@@ -183,7 +198,8 @@ void FileLogListener::Reload() {
FileLogListener::~FileLogListener() {
free(m_filename);
- fclose(m_logfile);
+ if (m_logfile)
+ fclose(m_logfile);
}
void FileLogListener::Log(LogTypes::LOG_LEVELS, const char *msg) {
diff --git a/Source/Core/Common/Src/LogManager.h b/Source/Core/Common/Src/LogManager.h
index 07f92640fd..a0aecb583e 100644
--- a/Source/Core/Common/Src/LogManager.h
+++ b/Source/Core/Common/Src/LogManager.h
@@ -165,14 +165,15 @@ public:
}
static LogManager* GetInstance() {
- if (! m_logManager)
- m_logManager = new LogManager();
return m_logManager;
}
static void SetInstance(LogManager *logManager) {
m_logManager = logManager;
}
+
+ static void Init();
+ static void Shutdown();
};
#endif // _LOGMANAGER_H_