X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Ftests%2Fasync_read.cs;h=4bb59149a60cb6a6cd6321d486add83ac6c105cc;hb=a8d9e343c6f827276362d6b9622eea244e66ebc6;hp=15389b485c19d8273b078c6431b062333db69716;hpb=a8b22e0e864c03b8cfd2f2cb5a8075b6611c5553;p=mono.git diff --git a/mono/tests/async_read.cs b/mono/tests/async_read.cs index 15389b485c1..4bb59149a60 100644 --- a/mono/tests/async_read.cs +++ b/mono/tests/async_read.cs @@ -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); + 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;