OSDN Git Service

Fix Pathwatcher thread can't stop when commitdlg exit.
authorFrank Li <lznuaa@gmail.com>
Sat, 22 Aug 2009 06:30:17 +0000 (14:30 +0800)
committerFrank Li <lznuaa@gmail.com>
Sat, 22 Aug 2009 06:30:17 +0000 (14:30 +0800)
Patchwatcher thread can't exit will cause crash when commitdlg exit

Signed-off-by: Frank Li <lznuaa@gmail.com>
src/TortoiseProc/CommitDlg.cpp
src/Utils/PathWatcher.cpp

index 681bca3..3f817a4 100644 (file)
@@ -810,9 +810,11 @@ UINT CCommitDlg::StatusThread()
 void CCommitDlg::OnCancel()\r
 {\r
        m_bCancelled = true;\r
+       m_pathwatcher.Stop();\r
+\r
        if (m_bBlock)\r
                return;\r
-       m_pathwatcher.Stop();\r
+       \r
        if (m_bThreadRunning)\r
        {\r
                InterlockedExchange(&m_bRunThread, FALSE);\r
index 429bcad..6fe1c47 100644 (file)
@@ -70,9 +70,15 @@ void CPathWatcher::Stop()
        {\r
                PostQueuedCompletionStatus(m_hCompPort, 0, NULL, NULL);\r
        }\r
+       \r
        if (m_hThread != INVALID_HANDLE_VALUE)\r
+       {\r
+               if( WaitForSingleObject(m_hThread, 1000) != WAIT_OBJECT_0 )\r
+               {\r
+                       TerminateThread(m_hThread, (DWORD)-1);\r
+               }\r
                CloseHandle(m_hThread);\r
-\r
+       }\r
        m_hThread = INVALID_HANDLE_VALUE;\r
        m_hCompPort = INVALID_HANDLE_VALUE;\r
 }\r