CTGitPath CDirectoryWatcher::CloseInfoMap(HANDLE hDir) { AutoLocker lock(m_critSec); TInfoMap::const_iterator d = watchInfoMap.find(hDir); if (d != watchInfoMap.end()) { CTGitPath root = CTGitPath(CTGitPath(d->second->m_DirPath).GetRootPathString()); RemovePathAndChildren(root); BlockPath(root); } CloseWatchHandles(); CTGitPath path; if (watchInfoMap.empty()) return path; for (TInfoMap::iterator I = watchInfoMap.begin(); I != watchInfoMap.end(); ++I) { CDirectoryWatcher::CDirWatchInfo * info = I->second; ScheduleForDeletion (info); } watchInfoMap.clear(); return path; }
bool CDirectoryWatcher::CloseHandlesForPath(const CTGitPath& path) { if (watchInfoMap.size() == 0) return false; AutoLocker lock(m_critSec); for (std::map<HANDLE, CDirWatchInfo *>::iterator I = watchInfoMap.begin(); I != watchInfoMap.end(); ++I) { CDirectoryWatcher::CDirWatchInfo * info = I->second; CTGitPath p = CTGitPath(info->m_DirPath); if (path.IsAncestorOf(p)) { RemovePathAndChildren(p); BlockPath(p); } info->CloseDirectoryHandle(); } watchInfoMap.clear(); if (m_hCompPort != INVALID_HANDLE_VALUE) CloseHandle(m_hCompPort); m_hCompPort = INVALID_HANDLE_VALUE; return true; }
bool CDirectoryWatcher::CloseHandlesForPath(const CTGitPath& path) { AutoLocker lock(m_critSec); CloseWatchHandles(); if (watchInfoMap.empty()) return false; for (TInfoMap::iterator I = watchInfoMap.begin(); I != watchInfoMap.end(); ++I) { CDirectoryWatcher::CDirWatchInfo * info = I->second; I->second = NULL; CTGitPath p = CTGitPath(info->m_DirPath); if (path.IsAncestorOf(p)) { RemovePathAndChildren(p); BlockPath(p); } ScheduleForDeletion(info); } watchInfoMap.clear(); return true; }
CTGitPath CDirectoryWatcher::CloseInfoMap(HDEVNOTIFY hdev) { CTGitPath path; if (watchInfoMap.size() == 0) return path; AutoLocker lock(m_critSec); for (std::map<HANDLE, CDirWatchInfo *>::iterator I = watchInfoMap.begin(); I != watchInfoMap.end(); ++I) { CDirectoryWatcher::CDirWatchInfo * info = I->second; if (info->m_hDevNotify == hdev) { path = info->m_DirName; RemovePathAndChildren(path); BlockPath(path); } info->CloseDirectoryHandle(); } watchInfoMap.clear(); if (m_hCompPort != INVALID_HANDLE_VALUE) CloseHandle(m_hCompPort); m_hCompPort = INVALID_HANDLE_VALUE; return path; }