From: Petr Onderka Date: Sun, 8 Jul 2012 18:21:42 +0000 (+0200) Subject: Fixed completion of JoinTargets X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=f9d6665916f3887411b7c6f8c9351cc9b7c88dfe;p=mono.git Fixed completion of JoinTargets --- diff --git a/mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/BatchedJoinBlock.cs b/mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/BatchedJoinBlock.cs index 6d27e0a2774..f77b3a8aa45 100644 --- a/mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/BatchedJoinBlock.cs +++ b/mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/BatchedJoinBlock.cs @@ -142,6 +142,8 @@ namespace System.Threading.Tasks.Dataflow { public void Complete () { + target1.Complete (); + target2.Complete (); outgoing.Complete (); } diff --git a/mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/BatchedJoinBlock`3.cs b/mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/BatchedJoinBlock`3.cs index cc80859f75a..832ac8bfc81 100644 --- a/mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/BatchedJoinBlock`3.cs +++ b/mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/BatchedJoinBlock`3.cs @@ -161,6 +161,9 @@ namespace System.Threading.Tasks.Dataflow { public void Complete () { + target1.Complete (); + target2.Complete (); + target3.Complete (); outgoing.Complete (); } diff --git a/mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/JoinBlock.cs b/mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/JoinBlock.cs index d03288cb588..2d8f923b262 100644 --- a/mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/JoinBlock.cs +++ b/mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/JoinBlock.cs @@ -97,6 +97,8 @@ namespace System.Threading.Tasks.Dataflow public void Complete () { + target1.Complete (); + target2.Complete (); outgoing.Complete (); } diff --git a/mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/JoinBlock`3.cs b/mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/JoinBlock`3.cs index 880ccae2089..344b92ecb82 100644 --- a/mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/JoinBlock`3.cs +++ b/mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/JoinBlock`3.cs @@ -105,6 +105,9 @@ namespace System.Threading.Tasks.Dataflow public void Complete () { + target1.Complete (); + target2.Complete (); + target3.Complete (); outgoing.Complete (); } diff --git a/mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/JoinTarget.cs b/mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/JoinTarget.cs index 778ae185828..63ab17ef41d 100644 --- a/mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/JoinTarget.cs +++ b/mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/JoinTarget.cs @@ -66,7 +66,7 @@ namespace System.Threading.Tasks.Dataflow { Task IDataflowBlock.Completion { get { - return joinBlock.Completion; + throw new NotSupportedException(); } } diff --git a/mcs/class/System.Threading.Tasks.Dataflow/Test/System.Threading.Tasks.Dataflow/CompletionTest.cs b/mcs/class/System.Threading.Tasks.Dataflow/Test/System.Threading.Tasks.Dataflow/CompletionTest.cs index 13e5af3b2f2..b031532d723 100644 --- a/mcs/class/System.Threading.Tasks.Dataflow/Test/System.Threading.Tasks.Dataflow/CompletionTest.cs +++ b/mcs/class/System.Threading.Tasks.Dataflow/Test/System.Threading.Tasks.Dataflow/CompletionTest.cs @@ -3,8 +3,10 @@ // // Author: // Jérémie "garuma" Laval +// Petr Onderka // // Copyright (c) 2011 Jérémie "garuma" Laval +// Copyright (c) 2012 Petr Onderka // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -25,8 +27,7 @@ // THE SOFTWARE. using System; -using System.Linq; -using System.Threading; +using System.Collections.Generic; using System.Threading.Tasks; using System.Threading.Tasks.Dataflow; @@ -85,5 +86,39 @@ namespace MonoTests.System.Threading.Tasks.Dataflow Assert.AreEqual (TaskStatus.Faulted, block.Completion.Status); Assert.IsFalse (block.Post (43)); } + + static IEnumerable>> + GetJoinBlocksWithTargets () + { + Func, Tuple>> + createTuple = Tuple.Create; + + var joinBlock = new JoinBlock (); + yield return createTuple (joinBlock, joinBlock.Target1); + var joinBlock3 = new JoinBlock (); + yield return createTuple (joinBlock3, joinBlock3.Target1); + var batchedJoinBlock = new BatchedJoinBlock (2); + yield return createTuple (batchedJoinBlock, batchedJoinBlock.Target1); + var batchedJoinBlock3 = new BatchedJoinBlock (2); + yield return createTuple (batchedJoinBlock3, batchedJoinBlock3.Target1); + } + + [Test] + public void JoinTargetCompletitionTest () + { + foreach (var tuple in GetJoinBlocksWithTargets ()) { + Assert.Throws ( + () => { var x = tuple.Item2.Completion; }); + Assert.IsTrue (tuple.Item2.Post (1)); + tuple.Item2.Complete (); + Assert.IsFalse (tuple.Item2.Post (2)); + } + + foreach (var tuple in GetJoinBlocksWithTargets ()) { + Assert.IsTrue (tuple.Item2.Post (1)); + tuple.Item1.Complete (); + Assert.IsFalse (tuple.Item2.Post (2)); + } + } } } \ No newline at end of file