[corlib] Fixes security tests failures
[mono.git] / mcs / class / corlib / System.Threading / Timer.cs
index dd32032436f9363d19827afc5e4df216edff9969..780cb9a140db65a2fb62789214ea5229874e8aaf 100644 (file)
@@ -31,6 +31,7 @@
 using System.Runtime.InteropServices;
 using System.Collections.Generic;
 using System.Collections;
+using System.Runtime.CompilerServices;
 
 namespace System.Threading
 {
@@ -153,7 +154,7 @@ namespace System.Threading
                                        return true;
                                }
                        } else {
-                               nr = dueTime * TimeSpan.TicksPerMillisecond + DateTime.GetTimeMonotonic ();
+                               nr = dueTime * TimeSpan.TicksPerMillisecond + GetTimeMonotonic ();
                        }
 
                        scheduler.Change (this, nr);
@@ -169,6 +170,15 @@ namespace System.Threading
                        return true;
                }
 
+               // extracted from ../../../../external/referencesource/mscorlib/system/threading/timer.cs
+               internal void KeepRootedWhileScheduled()
+               {
+               }
+
+               // TODO: Environment.TickCount should be enough as is everywhere else
+               [MethodImplAttribute(MethodImplOptions.InternalCall)]
+               static extern long GetTimeMonotonic ();
+
                sealed class TimerComparer : IComparer {
                        public int Compare (object x, object y)
                        {
@@ -323,7 +333,7 @@ namespace System.Threading
                                var new_time = new List<Timer> (512);
                                while (true) {
                                        int ms_wait = -1;
-                                       long ticks = DateTime.GetTimeMonotonic ();
+                                       long ticks = GetTimeMonotonic ();
                                        lock (this) {
                                                changed.Reset ();
                                                //PrintList ();
@@ -344,7 +354,7 @@ namespace System.Threading
                                                        if (no_more) {
                                                                timer.next_run = Int64.MaxValue;
                                                        } else {
-                                                               timer.next_run = DateTime.GetTimeMonotonic () + TimeSpan.TicksPerMillisecond * timer.period_ms;
+                                                               timer.next_run = GetTimeMonotonic () + TimeSpan.TicksPerMillisecond * timer.period_ms;
                                                                new_time.Add (timer);
                                                        }
                                                }
@@ -371,7 +381,7 @@ namespace System.Threading
                                                //PrintList ();
                                                ms_wait = -1;
                                                if (min_next_run != Int64.MaxValue) {
-                                                       long diff = (min_next_run - DateTime.GetTimeMonotonic ())  / TimeSpan.TicksPerMillisecond;
+                                                       long diff = (min_next_run - GetTimeMonotonic ())  / TimeSpan.TicksPerMillisecond;
                                                        if (diff > Int32.MaxValue)
                                                                ms_wait = Int32.MaxValue - 1;
                                                        else {