public void Dispose() { Log("Dispose before lock"); lock (locker) { Log("Dispose in lock"); var t = new ThreadInfo(); if (t.Id != thread.Id) { Log("Thread mismatch d:{0} != c:{1}", t, thread); } //AssertTools.True(t.Id == thread.Id, "Thread mismatch d:{0} != c:{1}", t, thread); if (!disposed) { Log("Disposing..."); ExceptionTools.Try(() => Dispose(disposed), HandleException); Log("Dispose OK"); Counter.Minus(this); disposed = true; var found = undisposed.Remove(this); AssertTools.True(found, "Disposable not found in undisposed"); Log("Disposed"); } } }
public static string MakeCli(string[] args, int offset) { var sb = new StringBuilder(); for (var i = 0; i < args.Length - offset; i++) { //reject arguments with double quotes //double quote arguments with spaces var arg = args[i + offset]; if (sb.Length > 0) { sb.Append(" "); } AssertTools.True(!arg.Contains("\""), "Invalid arg {0} {1}", i, arg); if (arg.Contains(" ")) { sb.Append("\""); } sb.Append(arg); if (arg.Contains(" ")) { sb.Append("\""); } } return(sb.ToString()); }