Merge pull request #5390 from kumpera/fix_58637
[mono.git] / mono / tests / async_read.cs
index bde780228512149d8121477f9b334537247aef30..4bb59149a60cb6a6cd6321d486add83ac6c105cc 100644 (file)
@@ -5,11 +5,13 @@ using System.Threading;
 class Test {
 
        static int sum = 0;
+       static int count = 0;
        
        static void async_callback (IAsyncResult ar)
        {
                byte [] buf = (byte [])ar.AsyncState;
-               sum += buf [0];
+               Interlocked.Add (ref sum, buf [0]);
+               Interlocked.Increment (ref count);
        }
 
        static int Main () {
@@ -17,27 +19,31 @@ class Test {
                AsyncCallback ac = new AsyncCallback (async_callback);
                IAsyncResult ar;
                int sum0 = 0;
+               int count0 = 0;
                
                FileStream s = new FileStream ("async_read.exe",  FileMode.Open, FileAccess.Read);
 
                s.Position = 0;
-               sum0 = 0;
-               while (s.Read (buf, 0, 1) == 1)
+               while (s.Read (buf, 0, 1) == 1) {
                        sum0 += buf [0];
+                       count0 ++;
+               }
                
                s.Position = 0;
                
                do {
+                       buf = new byte [1];
                        ar = s.BeginRead (buf, 0, 1, ac, buf);
                } while (s.EndRead (ar) == 1);
-               sum -= buf [0];
                
                Thread.Sleep (100);
                
                s.Close ();
 
+               count0 ++;  // async_callback is invoked for the "finished reading" case too
                Console.WriteLine ("CSUM: " + sum + " " + sum0);
-               if (sum != sum0)
+               Console.WriteLine ("Count: " + count + " " + count0);
+               if (sum != sum0 || count != count0)
                        return 1;
                
                return 0;