Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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);
            }
        }