diff --git a/Source/Engine/Platform/Linux/LinuxFileSystemWatcher.cpp b/Source/Engine/Platform/Linux/LinuxFileSystemWatcher.cpp index 4fcc679df..c02dca27e 100644 --- a/Source/Engine/Platform/Linux/LinuxFileSystemWatcher.cpp +++ b/Source/Engine/Platform/Linux/LinuxFileSystemWatcher.cpp @@ -19,6 +19,7 @@ namespace FileSystemWatchers { CriticalSection Locker; + int32 Count = 0; Dictionary RootWatchers; Dictionary>> Watchers; @@ -161,6 +162,7 @@ namespace FileSystemWatchers LinuxFileSystemWatcher::LinuxFileSystemWatcher(const String& directory, bool withSubDirs, int rootWatcher) : FileSystemWatcherBase(directory, withSubDirs) + , RootWatcher(rootWatcher) { FileSystemWatchers::Locker.Lock(); if (!FileSystemWatchers::Thread) @@ -176,6 +178,8 @@ LinuxFileSystemWatcher::LinuxFileSystemWatcher(const String& directory, bool wit { const StringAsANSI<250> directoryAnsi(*directory, directory.Length()); WachedDirectory = inotify_add_watch(FileSystemWatchers::WacherFileDescriptor, directoryAnsi.Get(), IN_MODIFY | IN_CREATE | IN_DELETE); + if (rootWatcher == -1) + FileSystemWatchers::Count++; FileSystemWatchers::Watchers[WachedDirectory] = Pair>(rootWatcher, Pair(directory, this)); if (withSubDirs) { @@ -194,8 +198,10 @@ LinuxFileSystemWatcher::~LinuxFileSystemWatcher() inotify_rm_watch(FileSystemWatchers::WacherFileDescriptor, WachedDirectory); FileSystemWatchers::RootWatchers.Remove(WachedDirectory); FileSystemWatchers::Watchers.Remove(WachedDirectory); + if (RootWatcher == -1) + FileSystemWatchers::Count--; } - if (FileSystemWatchers::RootWatchers.IsEmpty() && FileSystemWatchers::Thread) + if (FileSystemWatchers::Count == 0 && FileSystemWatchers::Thread) { FileSystemWatchers::ThreadActive = false; FileSystemWatchers::Thread->Join(); diff --git a/Source/Engine/Platform/Linux/LinuxFileSystemWatcher.h b/Source/Engine/Platform/Linux/LinuxFileSystemWatcher.h index be90def28..baf59c5dd 100644 --- a/Source/Engine/Platform/Linux/LinuxFileSystemWatcher.h +++ b/Source/Engine/Platform/Linux/LinuxFileSystemWatcher.h @@ -18,8 +18,8 @@ public: /// /// The directory to watch. /// True if monitor the directory tree rooted at the specified directory or just a given directory. - /// Linux specific root directory watcher file descriptor. - LinuxFileSystemWatcher(const String& directory, bool withSubDirs, int root= -1); + /// Linux specific root directory watcher file descriptor. + LinuxFileSystemWatcher(const String& directory, bool withSubDirs, int rootWatcher = -1); /// /// Finalizes an instance of the class. @@ -36,6 +36,7 @@ public: private: int WachedDirectory; + int RootWatcher; }; #endif