Remove no longer used BOOTSTRAP conditionals
[mono.git] / mcs / class / corlib / System.Threading / CancellationTokenSource.cs
index 872e4be3a9d73ab4dbb1f5e43f909283c72d3201..9981c5769fb8b4a39e363701d2846afca0a5f91e 100644 (file)
@@ -1,4 +1,3 @@
-#if NET_4_0
 // 
 // CancellationTokenSource.cs
 //  
 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 // THE SOFTWARE.
 
+#if NET_4_0
 using System;
 using System.Collections.Generic;
 
 namespace System.Threading
 {
        
-       public class CancellationTokenSource : IDisposable, ICancelableOperation
+       public sealed class CancellationTokenSource : IDisposable
        {
-               volatile bool canceled;
-               volatile bool processed;
+               bool canceled;
+               bool processed;
                
                int currId = int.MinValue;
                
@@ -43,9 +43,9 @@ namespace System.Threading
                
                ManualResetEvent handle = new ManualResetEvent (false);
                
-//#if USE_MONITOR
                object syncRoot = new object ();
-//#endif
+               
+               internal static readonly CancellationTokenSource NoneSource = new CancellationTokenSource ();
                
                public void Cancel ()
                {
@@ -53,18 +53,18 @@ namespace System.Threading
                }
                
                // If parameter is true we throw exception as soon as they appear otherwise we aggregate them
-               public void Cancel (bool throwOnFirst)
+               public void Cancel (bool throwOnFirstException)
                {
                        canceled = true;
                        handle.Set ();
                        
                        List<Exception> exceptions = null;
-                       if (!throwOnFirst)
+                       if (!throwOnFirstException)
                                exceptions = new List<Exception> ();
                        
                        lock (callbacks) {
                                foreach (KeyValuePair<CancellationTokenRegistration, Action> item in callbacks) {
-                                       if (throwOnFirst) {
+                                       if (throwOnFirstException) {
                                                item.Value ();
                                        } else {
                                                try {
@@ -76,6 +76,7 @@ namespace System.Threading
                                }
                        }
                        
+                       Thread.MemoryBarrier ();
                        processed = true;
                        
                        if (exceptions != null && exceptions.Count > 0)
@@ -105,10 +106,7 @@ namespace System.Threading
                
                public CancellationToken Token {
                        get {
-                               CancellationToken token = new CancellationToken (canceled);
-                               token.Source = this;
-                               
-                               return token;
+                               return CreateToken ();
                        }
                }
                
@@ -158,7 +156,7 @@ namespace System.Threading
                                sw.SpinOnce ();
                        
                }
-               
+
                CancellationTokenRegistration GetTokenReg ()
                {
                        CancellationTokenRegistration registration
@@ -166,6 +164,14 @@ namespace System.Threading
                        
                        return registration;
                }
+               
+               CancellationToken CreateToken ()
+               {
+                       CancellationToken tk = new CancellationToken (canceled);
+                       tk.Source = this;
+                       
+                       return tk;
+               }
        }
 }
 #endif