From 8feb7c6a89a613054e5f42da7a0d99d022747c90 Mon Sep 17 00:00:00 2001 From: Frank Li Date: Tue, 12 Jan 2010 10:12:27 +0800 Subject: [PATCH] Add multi-thread protection and correct log info label Signed-off-by: Frank Li --- src/TortoiseProc/GitLogListBase.cpp | 9 ++++++--- src/TortoiseProc/GitLogListBase.h | 2 ++ src/TortoiseProc/LogDlg.cpp | 10 +++++++--- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/TortoiseProc/GitLogListBase.cpp b/src/TortoiseProc/GitLogListBase.cpp index f4b7cd5..188c70f 100644 --- a/src/TortoiseProc/GitLogListBase.cpp +++ b/src/TortoiseProc/GitLogListBase.cpp @@ -74,6 +74,7 @@ CGitLogListBase::CGitLogListBase():CHintListCtrl() m_IsIDReplaceAction=FALSE; + this->m_critSec.Init(); m_wcRev.m_CommitHash.Empty(); m_wcRev.m_Subject=_T("Working dir changes"); m_wcRev.m_ParentHash.clear(); @@ -2096,8 +2097,7 @@ UINT CGitLogListBase::LogThread() CGitHash hash = (char*)commit.m_hash ; - m_logEntries.push_back(hash); - + GitRev *pRev = m_LogCache.GetCacheData(hash); if(pRev == NULL || !pRev->m_IsFull) @@ -2114,9 +2114,12 @@ UINT CGitLogListBase::LogThread() pRev->ParserParentFromCommit(&commit); } + this->m_critSec.Lock(); + m_logEntries.push_back(hash); m_arShownList.Add(pRev); + this->m_critSec.Unlock(); - if(t2-t1>500 && m_logEntries.size()>(oldsize+100) ) + if(t2-t1>500 ) { //update UI oldsize = m_logEntries.size(); diff --git a/src/TortoiseProc/GitLogListBase.h b/src/TortoiseProc/GitLogListBase.h index ceaebbb..76564fb 100644 --- a/src/TortoiseProc/GitLogListBase.h +++ b/src/TortoiseProc/GitLogListBase.h @@ -243,6 +243,8 @@ protected: int GetHeadIndex(); + CComCriticalSection m_critSec; + bool m_bFilterWithRegex; diff --git a/src/TortoiseProc/LogDlg.cpp b/src/TortoiseProc/LogDlg.cpp index 9c29a18..41e84bf 100644 --- a/src/TortoiseProc/LogDlg.cpp +++ b/src/TortoiseProc/LogDlg.cpp @@ -375,8 +375,9 @@ LRESULT CLogDlg::OnLogListLoading(WPARAM wParam, LPARAM /*lParam*/) if(this->m_LogList.HasText()) { this->m_LogList.ClearText(); - //UpdateLogInfoLabel(); + } + UpdateLogInfoLabel(); #if 0 //if (!m_bShowedAll) @@ -2518,15 +2519,18 @@ void CLogDlg::UpdateLogInfoLabel() git_revnum_t rev2 ; long selectedrevs = 0; int count =m_LogList.m_arShownList.GetCount(); + int start = 0; if (count) { - rev1 = (reinterpret_cast(m_LogList.m_arShownList.GetAt(0)))->m_CommitHash; + if(this->m_LogList.m_bShowWC) + start = 1; + rev1 = (reinterpret_cast(m_LogList.m_arShownList.GetAt(start)))->m_CommitHash; //pLogEntry = reinterpret_cast(m_arShownList.GetAt(m_arShownList.GetCount()-1)); rev2 = (reinterpret_cast(m_LogList.m_arShownList.GetAt(count-1)))->m_CommitHash; selectedrevs = m_LogList.GetSelectedCount(); } CString sTemp; - sTemp.Format(_T("Showing %ld revision(s), from revision %s to revision %s - %ld revision(s) selected"), count, rev2.Left(6), rev1.Left(6), selectedrevs); + sTemp.Format(_T("Showing %ld revision(s), from revision %s to revision %s - %ld revision(s) selected"), count - start, rev2.Left(6), rev1.Left(6), selectedrevs); m_sLogInfo = sTemp; UpdateData(FALSE); -- 2.11.0