diff --git a/Projects/Server/Buffers/SlabMemoryPool.cs b/Projects/Server/Buffers/SlabMemoryPool.cs index 7e7ebdb97..99a7e66d1 100644 --- a/Projects/Server/Buffers/SlabMemoryPool.cs +++ b/Projects/Server/Buffers/SlabMemoryPool.cs @@ -122,12 +122,7 @@ namespace System.Buffers block = new MemoryPoolBlock(this, slab, offset, _blockSize); if (i != blockCount - 1) // last block - { -#if BLOCK_LEASE_TRACKING - block.IsLeased = true; -#endif Return(block); - } offset += _blockSize; } diff --git a/Projects/Server/Main.cs b/Projects/Server/Main.cs index 04cbfc9a1..9763edebb 100644 --- a/Projects/Server/Main.cs +++ b/Projects/Server/Main.cs @@ -37,8 +37,6 @@ using Server.Network; namespace Server { - public delegate void Slice(); - public static class Core { private static bool m_Crashed; @@ -50,21 +48,16 @@ namespace Server private static DateTime m_ProfileStart; private static TimeSpan m_ProfileTime; - public static Slice Slice; - /* * DateTime.Now and DateTime.UtcNow are based on actual system clock time. * The resolution is acceptable but large clock jumps are possible and cause issues. * GetTickCount and GetTickCount64 have poor resolution. - * GetTickCount64 is unavailable on Windows XP and Windows Server 2003. * Stopwatch.GetTimestamp() (QueryPerformanceCounter) is high resolution, but * somewhat expensive to call because of its difference to DateTime.Now, * which is why Stopwatch has been used to verify HRT before calling GetTimestamp(), * enabling the usage of DateTime.UtcNow instead. */ - private static readonly bool m_HighRes = Stopwatch.IsHighResolution; - private static readonly double m_HighFrequency = 1000.0 / Stopwatch.Frequency; private static readonly double m_LowFrequency = 1000.0 / TimeSpan.TicksPerSecond; @@ -107,8 +100,6 @@ namespace Server } } - public static bool Debug { get; private set; } - internal static bool HaltOnWarning { get; private set; } public static Assembly Assembly { get; set; } @@ -118,19 +109,12 @@ namespace Server public static Thread Thread { get; private set; } - public static bool UsingHighResolutionTiming => m_HighRes && !Unix; - public static long TickCount => (long)Ticks; - public static double Ticks - { - get - { - if (m_HighRes && !Unix) return Stopwatch.GetTimestamp() * m_HighFrequency; - - return DateTime.UtcNow.Ticks * m_LowFrequency; - } - } + public static double Ticks => + Stopwatch.IsHighResolution + ? Stopwatch.GetTimestamp() * m_HighFrequency + : DateTime.UtcNow.Ticks * m_LowFrequency; public static bool MultiProcessor { get; private set; } @@ -177,9 +161,6 @@ namespace Server { var sb = new StringBuilder(); - if (Debug) - Utility.Separate(sb, "-debug", " "); - if (m_Profiling) Utility.Separate(sb, "-profile", " "); @@ -316,9 +297,7 @@ namespace Server AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit; foreach (var a in args) - if (Insensitive.Equals(a, "-debug")) - Debug = true; - else if (Insensitive.Equals(a, "-profile")) + if (Insensitive.Equals(a, "-profile")) Profiling = true; else if (Insensitive.Equals(a, "-haltonwarning")) HaltOnWarning = true; @@ -376,7 +355,7 @@ namespace Server Console.WriteLine("Core: Server garbage collection mode enabled"); Console.WriteLine("Core: High resolution timing ({0})", - UsingHighResolutionTiming ? "Supported" : "Unsupported"); + Stopwatch.IsHighResolution ? "Supported" : "Unsupported"); Console.WriteLine("SecureRandomImpl: {0} ({1})", SecureRandomImpl.Name, SecureRandomImpl.IsHardwareRNG ? "Hardware" : "Software"); @@ -439,8 +418,6 @@ namespace Server NetState.ProcessDisposedQueue(); - Slice?.Invoke(); - if (sample++ % sampleInterval != 0) continue; @@ -562,106 +539,4 @@ namespace Server public static bool EJ => Expansion >= Expansion.EJ; } - - public class FileLogger : TextWriter - { - public const string DateFormat = "[MMMM dd hh:mm:ss.f tt]: "; - - private bool m_NewLine; - - public FileLogger(string file, bool append = false) - { - FileName = file; - - using ( - var writer = - new StreamWriter( - new FileStream(FileName, append ? FileMode.Append : FileMode.Create, FileAccess.Write, - FileShare.Read))) - { - writer.WriteLine(">>>Logging started on {0}.", DateTime.UtcNow.ToString("f")); - // f = Tuesday, April 10, 2001 3:51 PM - } - - m_NewLine = true; - } - - public string FileName { get; } - - public override Encoding Encoding => Encoding.Default; - - public override void Write(char ch) - { - using var writer = new StreamWriter(new FileStream(FileName, FileMode.Append, FileAccess.Write, FileShare.Read)); - if (m_NewLine) - { - writer.Write(DateTime.UtcNow.ToString(DateFormat)); - m_NewLine = false; - } - - writer.Write(ch); - } - - public override void Write(string str) - { - using var writer = - new StreamWriter(new FileStream(FileName, FileMode.Append, FileAccess.Write, FileShare.Read)); - if (m_NewLine) - { - writer.Write(DateTime.UtcNow.ToString(DateFormat)); - m_NewLine = false; - } - - writer.Write(str); - } - - public override void WriteLine(string line) - { - using var writer = - new StreamWriter(new FileStream(FileName, FileMode.Append, FileAccess.Write, FileShare.Read)); - if (m_NewLine) writer.Write(DateTime.UtcNow.ToString(DateFormat)); - - writer.WriteLine(line); - m_NewLine = true; - } - } - - public class MultiTextWriter : TextWriter - { - private readonly List m_Streams; - - public MultiTextWriter(params TextWriter[] streams) - { - m_Streams = new List(streams); - - if (m_Streams.Count < 0) throw new ArgumentException("You must specify at least one stream."); - } - - public override Encoding Encoding => Encoding.Default; - - public void Add(TextWriter tw) - { - m_Streams.Add(tw); - } - - public void Remove(TextWriter tw) - { - m_Streams.Remove(tw); - } - - public override void Write(char ch) - { - foreach (var t in m_Streams) t.Write(ch); - } - - public override void WriteLine(string line) - { - foreach (var t in m_Streams) t.WriteLine(line); - } - - public override void WriteLine(string line, params object[] args) - { - WriteLine(string.Format(line, args)); - } - } } diff --git a/Projects/Server/Network/NetState.cs b/Projects/Server/Network/NetState.cs index 262ca216d..ae302990b 100644 --- a/Projects/Server/Network/NetState.cs +++ b/Projects/Server/Network/NetState.cs @@ -544,9 +544,6 @@ namespace Server.Network public static void TraceException(Exception ex) { - if (!Core.Debug) - return; - try { using var op = new StreamWriter("network-errors.log", true); diff --git a/Projects/Server/Persistence/FileOperations.cs b/Projects/Server/Persistence/FileOperations.cs index 39725da69..c042d91a9 100644 --- a/Projects/Server/Persistence/FileOperations.cs +++ b/Projects/Server/Persistence/FileOperations.cs @@ -18,12 +18,11 @@ * ***************************************************************************/ -using System; using System.IO; -#if !MONO +#if WINDOWS +using System; using System.Runtime.InteropServices; using Microsoft.Win32.SafeHandles; - #endif namespace Server @@ -37,12 +36,12 @@ namespace Server public static int Concurrency { get; set; } = 1; +#if WINDOWS public static bool Unbuffered { get; set; } = true; +#endif public static bool AreSynchronous => Concurrency < 1; - public static bool AreAsynchronous => Concurrency > 0; - public static FileStream OpenSequentialStream(string path, FileMode mode, FileAccess access, FileShare share) { var options = FileOptions.SequentialScan; @@ -50,7 +49,7 @@ namespace Server if (Concurrency > 0) options |= FileOptions.Asynchronous; -#if MONO +#if !WINDOWS return new FileStream( path, mode, access, share, BufferSize, options ); #else if (Unbuffered) @@ -67,7 +66,7 @@ namespace Server #endif } -#if !MONO +#if WINDOWS private class UnbufferedFileStream : FileStream { private readonly SafeFileHandle fileHandle; @@ -94,7 +93,7 @@ namespace Server } #endif -#if !MONO +#if WINDOWS private const FileOptions NoBuffering = (FileOptions)0x20000000; internal static class UnsafeNativeMethods diff --git a/Projects/UOContent/Commands/Docs.cs b/Projects/UOContent/Commands/Docs.cs index bedffa94f..77767ad1e 100644 --- a/Projects/UOContent/Commands/Docs.cs +++ b/Projects/UOContent/Commands/Docs.cs @@ -318,8 +318,6 @@ namespace Server.Commands */ public static bool DontLink(Type type) { - // MONO: type.Namespace is null/empty for generic arguments - if (type.Name == "T" || string.IsNullOrEmpty(type.Namespace) || m_Namespaces == null) return true;