mirror of
https://github.com/chibicitiberiu/rainmeter-studio.git
synced 2024-02-24 04:33:31 +00:00
Fixed a issue that Rainmeter crashes at LSLog(). (multithreading issue)
This commit is contained in:
parent
df146e4eb4
commit
704558b7df
@ -148,12 +148,12 @@ void UpdateAboutStatistics(LPCTSTR entryName)
|
|||||||
{
|
{
|
||||||
int count = ListView_GetItemCount(widget);
|
int count = ListView_GetItemCount(widget);
|
||||||
|
|
||||||
std::list<CRainmeter::LOG_INFO>::const_iterator iter = Rainmeter->m_LogData.begin();
|
std::list<CRainmeter::LOG_INFO>::const_iterator iter = Rainmeter->GetAboutLogData().begin();
|
||||||
LVITEM vitem;
|
LVITEM vitem;
|
||||||
vitem.mask = LVIF_TEXT;
|
vitem.mask = LVIF_TEXT;
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for ( ; iter != Rainmeter->m_LogData.end(); ++iter)
|
for ( ; iter != Rainmeter->GetAboutLogData().end(); ++iter)
|
||||||
{
|
{
|
||||||
if (i < count)
|
if (i < count)
|
||||||
{
|
{
|
||||||
|
@ -21,6 +21,8 @@
|
|||||||
|
|
||||||
#include "MeterWindow.h"
|
#include "MeterWindow.h"
|
||||||
|
|
||||||
|
#define MAXABOUTLOGLINES 20
|
||||||
|
|
||||||
HWND OpenAboutDialog(HWND hwndOwner, HINSTANCE instance);
|
HWND OpenAboutDialog(HWND hwndOwner, HINSTANCE instance);
|
||||||
void UpdateAboutDialog();
|
void UpdateAboutDialog();
|
||||||
void UpdateAboutStatistics(LPCTSTR entryName = NULL);
|
void UpdateAboutStatistics(LPCTSTR entryName = NULL);
|
||||||
|
@ -548,10 +548,9 @@ BOOL LSLog(int nLevel, LPCTSTR pszModule, LPCTSTR pszMessage)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rainmeter->m_LogData.push_front(logInfo);
|
if (Rainmeter)
|
||||||
if (Rainmeter->m_LogData.size() > MAXABOUTLOGLINES)
|
|
||||||
{
|
{
|
||||||
Rainmeter->m_LogData.pop_back();
|
Rainmeter->AddAboutLogInfo(logInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use the lsapi.dll version of the method if possible
|
// Use the lsapi.dll version of the method if possible
|
||||||
|
@ -28,7 +28,6 @@
|
|||||||
#define LM_GETREVID 9265
|
#define LM_GETREVID 9265
|
||||||
#define LM_REGISTERMESSAGE 9263
|
#define LM_REGISTERMESSAGE 9263
|
||||||
#define LM_UNREGISTERMESSAGE 9264
|
#define LM_UNREGISTERMESSAGE 9264
|
||||||
#define MAXABOUTLOGLINES 20
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
#define DEBUGLOG DebugLog
|
#define DEBUGLOG DebugLog
|
||||||
|
@ -1213,6 +1213,8 @@ CRainmeter::CRainmeter()
|
|||||||
|
|
||||||
m_TrayWindow = NULL;
|
m_TrayWindow = NULL;
|
||||||
|
|
||||||
|
InitializeCriticalSection(&m_CsLogData);
|
||||||
|
|
||||||
INITCOMMONCONTROLSEX initCtrls;
|
INITCOMMONCONTROLSEX initCtrls;
|
||||||
initCtrls.dwSize = sizeof(INITCOMMONCONTROLSEX);
|
initCtrls.dwSize = sizeof(INITCOMMONCONTROLSEX);
|
||||||
initCtrls.dwICC = ICC_TAB_CLASSES;
|
initCtrls.dwICC = ICC_TAB_CLASSES;
|
||||||
@ -1254,6 +1256,8 @@ CRainmeter::~CRainmeter()
|
|||||||
UpdateDesktopWorkArea(true);
|
UpdateDesktopWorkArea(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DeleteCriticalSection(&m_CsLogData);
|
||||||
|
|
||||||
GdiplusShutdown(m_GDIplusToken);
|
GdiplusShutdown(m_GDIplusToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3731,6 +3735,19 @@ void CRainmeter::DeleteLogFile()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CRainmeter::AddAboutLogInfo(const LOG_INFO& logInfo)
|
||||||
|
{
|
||||||
|
EnterCriticalSection(&m_CsLogData);
|
||||||
|
|
||||||
|
m_LogData.push_front(logInfo);
|
||||||
|
if (m_LogData.size() > MAXABOUTLOGLINES)
|
||||||
|
{
|
||||||
|
m_LogData.pop_back();
|
||||||
|
}
|
||||||
|
|
||||||
|
LeaveCriticalSection(&m_CsLogData);
|
||||||
|
}
|
||||||
|
|
||||||
void CRainmeter::SetLogging(bool logging)
|
void CRainmeter::SetLogging(bool logging)
|
||||||
{
|
{
|
||||||
m_Logging = logging;
|
m_Logging = logging;
|
||||||
|
@ -195,7 +195,9 @@ public:
|
|||||||
void StartLogging();
|
void StartLogging();
|
||||||
void StopLogging();
|
void StopLogging();
|
||||||
void DeleteLogFile();
|
void DeleteLogFile();
|
||||||
std::list<LOG_INFO> m_LogData;
|
|
||||||
|
void AddAboutLogInfo(const LOG_INFO& logInfo);
|
||||||
|
const std::list<LOG_INFO>& GetAboutLogData() { return m_LogData; }
|
||||||
|
|
||||||
void SetDebug(bool debug);
|
void SetDebug(bool debug);
|
||||||
|
|
||||||
@ -279,6 +281,9 @@ private:
|
|||||||
|
|
||||||
bool m_Logging;
|
bool m_Logging;
|
||||||
|
|
||||||
|
std::list<LOG_INFO> m_LogData;
|
||||||
|
CRITICAL_SECTION m_CsLogData;
|
||||||
|
|
||||||
std::wstring m_ConfigEditor;
|
std::wstring m_ConfigEditor;
|
||||||
std::wstring m_LogViewer;
|
std::wstring m_LogViewer;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user