[SHELL32] Follow-up of #2659
authorKatayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
Mon, 4 May 2020 06:28:16 +0000 (15:28 +0900)
committerKatayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
Mon, 4 May 2020 06:28:16 +0000 (15:28 +0900)
Add CreateAPCThread function and use it. CORE-13950

dll/win32/shell32/shelldesktop/CChangeNotifyServer.cpp

index a585297..da619b9 100644 (file)
@@ -787,6 +787,17 @@ void CChangeNotifyServer::RemoveItemsByProcess(DWORD dwOwnerPID, DWORD dwUserPID
     }
 }
 
+BOOL CreateAPCThread(void)
+{
+    if (s_hThreadAPC != NULL)
+        return TRUE;
+
+    unsigned tid;
+    s_fTerminateAllWatches = FALSE;
+    s_hThreadAPC = (HANDLE)_beginthreadex(NULL, 0, DirWatchThreadFuncAPC, NULL, 0, &tid);
+    return s_hThreadAPC != NULL;
+}
+
 // Message CN_REGISTER: Register the registration entry.
 //   wParam: The handle of registration entry.
 //   lParam: The owner PID of registration entry.
@@ -834,18 +845,12 @@ LRESULT CChangeNotifyServer::OnRegister(UINT uMsg, WPARAM wParam, LPARAM lParam,
     if (pDirWatch)
     {
         // create an APC thread for directory watching
-        if (s_hThreadAPC == NULL)
+        if (!CreateAPCThread())
         {
-            unsigned tid;
-            s_fTerminateAllWatches = FALSE;
-            s_hThreadAPC = (HANDLE)_beginthreadex(NULL, 0, DirWatchThreadFuncAPC, NULL, 0, &tid);
-            if (s_hThreadAPC == NULL)
-            {
-                pRegEntry->nRegID = INVALID_REG_ID;
-                SHUnlockShared(pRegEntry);
-                delete pDirWatch;
-                return FALSE;
-            }
+            pRegEntry->nRegID = INVALID_REG_ID;
+            SHUnlockShared(pRegEntry);
+            delete pDirWatch;
+            return FALSE;
         }
 
         // request adding the watch