private static void GenerateBlobListThread(string Root, ConcurrentQueue <string> FilesQueue, ConcurrentDictionary <string, DependencyFile> DepFiles, ConcurrentDictionary <string, DependencyBlob> DepBlobs) { string PackFile; while (FilesQueue.TryDequeue(out PackFile)) { string FullPath = Path.Combine(Root, PackFile); long FileSize; // Add File info. DependencyFile DepFile = new DependencyFile(); DepFile.IsExecutable = StatFileHelper.IsExecutalbe(FullPath); DepFile.Name = PackFile; DepFile.Hash = ComputeHashForFile(FullPath, out FileSize); if (DepFiles.TryAdd(PackFile, DepFile)) { // Add Blob info. DependencyBlob DepBlob = new DependencyBlob(); DepBlob.Hash = DepFile.Hash; DepBlob.Size = FileSize; DepBlobs.TryAdd(DepBlob.Hash, DepBlob); } } }
void Check() { _lock.AcquireReaderLock(Timeout.Infinite); try { bool check = (_deps == null); if (_deps != null) { for (int i = 0; i < _deps.Length; i++) { if (_deps[i].IsUpdate()) { check = true; break; } } } if (check) { LockCookie cookie = _lock.UpgradeToWriterLock(Timeout.Infinite); try { check = (_deps == null); if (_deps != null) { for (int i = 0; i < _deps.Length; i++) { if (_deps[i].IsUpdate()) { check = true; break; } } } if (check) { List <string> files = new List <string> (); Resolver resolver = new Resolver(false, _path, INDENT, files); _xsl_xhtml = new XslCompiledTransform(); using (XmlTextReader reader = new XmlTextReader(_path)) { reader.XmlResolver = resolver; _xsl_xhtml.Load(new XPathDocument(reader), XsltSettings.Default, resolver); } resolver = new Resolver(true, _path, INDENT, null); _xsl_html4 = new XslCompiledTransform(); using (XmlTextReader reader = new XmlTextReader(_path)) { reader.XmlResolver = resolver; _xsl_html4.Load(new XPathDocument(reader), XsltSettings.Default, resolver); } _deps = new DependencyFile[files.Count]; for (int i = 0; i < files.Count; i++) { _deps[i] = new DependencyFile(); _deps[i].Path = files[i]; _deps[i].LastWriteTimeUtc = _deps[i].GetLastWriteTime(); } } } finally { _lock.DowngradeFromWriterLock(ref cookie); } } } finally { _lock.ReleaseReaderLock(); } }
/// <summary> /// Add a new dependency file. /// </summary> /// <param name="filename"></param> /// <returns></returns> internal void AddDependencyFile( string filename, DependencyFile file ) { dependencies[filename] = file; }
void Check() { _lock.AcquireReaderLock (Timeout.Infinite); try { bool check = (_deps == null); if (_deps != null) { for (int i = 0; i < _deps.Length; i ++) { if (_deps[i].IsUpdate ()) { check = true; break; } } } if (check) { LockCookie cookie = _lock.UpgradeToWriterLock (Timeout.Infinite); try { check = (_deps == null); if (_deps != null) { for (int i = 0; i < _deps.Length; i++) { if (_deps[i].IsUpdate ()) { check = true; break; } } } if (check) { List<string> files = new List<string> (); Resolver resolver = new Resolver (false, _path, INDENT, files); _xsl_xhtml = new XslCompiledTransform (); using (XmlTextReader reader = new XmlTextReader (_path)) { reader.XmlResolver = resolver; _xsl_xhtml.Load (new XPathDocument (reader), XsltSettings.Default, resolver); } resolver = new Resolver (true, _path, INDENT, null); _xsl_html4 = new XslCompiledTransform (); using (XmlTextReader reader = new XmlTextReader (_path)) { reader.XmlResolver = resolver; _xsl_html4.Load (new XPathDocument (reader), XsltSettings.Default, resolver); } _deps = new DependencyFile[files.Count]; for (int i = 0; i < files.Count; i ++) { _deps[i] = new DependencyFile (); _deps[i].Path = files[i]; _deps[i].LastWriteTimeUtc = _deps[i].GetLastWriteTime (); } } } finally { _lock.DowngradeFromWriterLock (ref cookie); } } } finally { _lock.ReleaseReaderLock (); } }