diff --git a/src/Utils/FileWatcher.cpp b/src/Utils/FileWatcher.cpp index 4fb7768..eeb1e63 100644 --- a/src/Utils/FileWatcher.cpp +++ b/src/Utils/FileWatcher.cpp @@ -107,6 +107,11 @@ namespace FileWatcher { static void WatcherThread() { const size_t numDirs = g_watchDirs.size(); + if (numDirs == 0) { + LOG_PACKAGE_WARN("No directories configured for watcher"); + return; + } + std::vector dirHandles(numDirs, nullptr); std::vector overlapped(numDirs); std::vector events(numDirs, nullptr); @@ -199,11 +204,23 @@ namespace FileWatcher { } void Start(const std::vector& directories) { + if (directories.empty()) { + LOG_PACKAGE_WARN("No directories configured for watcher start"); + return; + } + + std::vector effectiveDirs = directories; + if (effectiveDirs.size() > MAXIMUM_WAIT_OBJECTS) { + LOG_PACKAGE_WARN("Too many watch directories: {} (max supported by WaitForMultipleObjects: {})", + effectiveDirs.size(), MAXIMUM_WAIT_OBJECTS); + effectiveDirs.resize(MAXIMUM_WAIT_OBJECTS); + } + if (g_running.exchange(true)) { LOG_PACKAGE_WARN("Already running"); return; } - g_watchDirs = directories; + g_watchDirs = effectiveDirs; g_watcherThread = std::thread(WatcherThread); }