Fix bug in BlockingCollection<T>.TryTake Add corresponding unit test
authorGuillaume Pouillet <nekresh@gmail.com>
Tue, 7 Dec 2010 09:30:12 +0000 (10:30 +0100)
committerGuillaume Pouillet <nekresh@gmail.com>
Tue, 7 Dec 2010 10:24:03 +0000 (11:24 +0100)
mcs/class/System/System.Collections.Concurrent/BlockingCollection.cs
mcs/class/System/Test/System.Collections.Concurrent/BlockingCollectionTests.cs

index 75d7784cfbbb28b6dbb369d38ebd893e40230d99..56fcf1cb0ad2886ea511b995b21101a05e419f6a 100644 (file)
@@ -269,6 +269,7 @@ namespace System.Collections.Concurrent
 
                                if (!mreRemove.IsSet)
                                        mreRemove.Set ();
+                               return true;
                        } while (contFunc ());
 
                        return false;
index c9a5829a530d9895589c4c404050dfde73b9e970..b88479f3d973c19169c4d5b5878207be95e2ba11 100644 (file)
@@ -166,6 +166,22 @@ namespace MonoTests.System.Collections.Concurrent
                        }
                        Assert.AreEqual(0, defaultCollection.Count, "#" + i);
                }
+
+               [TestAttribute]
+               public void TryTakeTestCase ()
+               {
+                       defaultCollection.Add (1);
+
+                       int value = default (int);
+                       bool firstTake = defaultCollection.TryTake (out value);
+                       int value2 = default (int);
+                       bool secondTake = defaultCollection.TryTake (out value2);
+
+                       Assert.AreEqual (1, value);
+                       Assert.IsTrue (firstTake);
+                       Assert.AreEqual (default (int), value2);
+                       Assert.IsFalse (secondTake);
+               }
        }
 }
 #endif