////////////////////////////////////////////////////////////////////////// // Debug ////////////////////////////////////////////////////////////////////////// public void dump(Fan.Sys.List args) { Fan.Sys.OutStream @out = Fan.Sys.Env.cur().@out(); if (args != null && args.size() > 0) { @out = (Fan.Sys.OutStream)args.get(0); } @out.printLine("ThreadPool"); @out.printLine(" pending: " + pending.Count); @out.printLine(" idle: " + idle.Count); @out.printLine(" workers: " + workers.Count); IEnumerator en = workers.Values.GetEnumerator(); while (en.MoveNext()) { Worker w = (Worker)en.Current; @out.printLine(" " + w + " " + w.work); } }
////////////////////////////////////////////////////////////////////////// // Verify Dlls ////////////////////////////////////////////////////////////////////////// static void verifyDlls() { // get dirs string podDir = FileUtil.combine(Sys.m_homeDir, "lib", "fan"); string tmpDir = FileUtil.combine(Sys.m_homeDir, "lib", "tmp"); // check our tmp dir - cleaning up out-of-date DLL and PDB files if (Directory.Exists(tmpDir)) { string[] tmp = Directory.GetFiles(tmpDir, "*.dll"); Hashtable keep = new Hashtable(); string sysDll = FileUtil.combine(Sys.m_homeDir, "lib", "dotnet", "sys.dll"); DateTime sysModified = File.GetLastWriteTime(sysDll); if (debug) { System.Console.WriteLine("\n sys " + sysModified + "\n"); System.Console.WriteLine(pad(" pod", 15) + pad("action", 10) + pad("podTime", 25) + pad("dllTime", 25)); System.Console.WriteLine(pad(" ---", 15) + pad("------", 10) + pad("-------", 25) + pad("-------", 25)); } for (int i = 0; i < tmp.Length; i++) { string dll = tmp[i]; int start = dll.LastIndexOf("\\") + 1; int end = dll.IndexOf("."); string name = dll.Substring(start, end - start); DateTime podModified = DateTime.MinValue; DateTime dllModified = DateTime.MinValue; // native get handled by pod if (name.EndsWith("Native_")) { continue; } // check for pod string pod = FileUtil.combine(podDir, name + ".pod"); if (File.Exists(pod)) { // if the DLL is still up-to-date, just reuse it podModified = File.GetLastWriteTime(pod); dllModified = File.GetLastWriteTime(dll); if (podModified < dllModified) { keep[name] = new PodInfo(Pod.find(name, false), dllModified); } } if (debug) { PodInfo info = keep[name] as PodInfo; StringBuilder b = new StringBuilder(pad(" " + name, 15)); b.Append(pad(keep[name] != null ? "[keep]" : "[delete]", 10)); if (podModified != DateTime.MinValue) { b.Append(pad(podModified.ToString(), 25)); } if (dllModified != DateTime.MinValue) { b.Append(pad(dllModified.ToString(), 25)); } System.Console.WriteLine(b); } } if (debug) { System.Console.WriteLine(""); } // check pod dependencies string[] keys = new string[keep.Count]; keep.Keys.CopyTo(keys, 0); for (int k = 0; k < keys.Length; k++) { string name = keys[k]; PodInfo info = keep[name] as PodInfo; // check sys first if (info.modified < sysModified) { keep.Remove(name); if (debug) { System.Console.WriteLine(pad(" " + name, 15) + "[delete] due to sys"); } continue; } // check for out-of-date depends List depends = info.pod.depends(); for (int i = 0; i < depends.sz(); i++) { Depend d = depends.get(i) as Depend; string n = d.name(); if (n == "sys") { continue; // skip sys } if (keep[n] == null) { keep.Remove(name); if (debug) { System.Console.WriteLine(pad(" " + name, 15) + "[delete] due to " + n); } break; } } } if (debug) { if (keep.Count > 0) { System.Console.WriteLine(""); foreach (string key in keep.Keys) { System.Console.WriteLine(" [keep] " + key); } } System.Console.WriteLine(""); } // delete out-of-date for (int i = 0; i < tmp.Length; i++) { string dll = tmp[i]; int start = dll.LastIndexOf("\\") + 1; int end = dll.IndexOf("."); string name = dll.Substring(start, end - start); string pdb = FileUtil.combine(tmpDir, name + ".pdb"); // native get handled by pod if (name.EndsWith("Native_")) { name = name.Substring(0, name.Length - "Native_".Length); } // if keep, skip if (keep[name] != null) { continue; } // nuke it! if (debug) { System.Console.WriteLine(" [delete] " + tmp[i]); if (File.Exists(pdb)) { System.Console.WriteLine(" [delete] " + pdb); } } File.Delete(dll); File.Delete(pdb); } if (debug) { System.Console.WriteLine(""); } } // mark env as initialized isInit = true; }