https://git.reactos.org/?p=reactos.git;a=commitdiff;h=7980f409112cdc87890e9…
commit 7980f409112cdc87890e90f9836ae52c6c3f8b76
Author: Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com>
AuthorDate: Mon May 4 15:28:16 2020 +0900
Commit: Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com>
CommitDate: Mon May 4 15:28:16 2020 +0900
[SHELL32] Follow-up of #2659
Add CreateAPCThread function and use it. CORE-13950
---
.../shell32/shelldesktop/CChangeNotifyServer.cpp | 27 +++++++++++++---------
1 file changed, 16 insertions(+), 11 deletions(-)
diff --git a/dll/win32/shell32/shelldesktop/CChangeNotifyServer.cpp
b/dll/win32/shell32/shelldesktop/CChangeNotifyServer.cpp
index a5852976f1e..da619b9104b 100644
--- a/dll/win32/shell32/shelldesktop/CChangeNotifyServer.cpp
+++ b/dll/win32/shell32/shelldesktop/CChangeNotifyServer.cpp
@@ -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