public bool Free(VirtualDirectoryWatcher watcher) { lock (_lockObject) { if (_isDisposed) { return(false); } if (!_directoryWatchers.ContainsKey(watcher.Directory)) { return(true); } var retv = --_watchersAllocations[watcher] <= 0; if (!retv) { return(false); } _directoryWatchers.Remove(watcher.Directory); _watchersAllocations.Remove(watcher); return(true); } }
private bool tryGetWatcher(VirtualDirectory src, out VirtualDirectoryWatcher watcher) { lock (_lockObject) { watcher = null; if (_isDisposed) { return(false); } var retv = _directoryWatchers.ContainsKey(src); if (retv) { watcher = _directoryWatchers[src]; } return(retv); } }
public VirtualDirectoryWatcher Alloc(VirtualDirectory directory) { lock (_lockObject) { if (_isDisposed) { throw new ObjectDisposedException(nameof(VirtualDirectoryWatcherSource)); } if (!_directoryWatchers.ContainsKey(directory)) { var newWatcher = new VirtualDirectoryWatcher(directory, this); _directoryWatchers[directory] = newWatcher; _watchersAllocations[newWatcher] = 0; } var watcher = _directoryWatchers[directory]; _watchersAllocations[watcher]++; return(watcher); } }