Bug? taskPool.map() with bufSize and writeln() gets stuck

MattCodr matheus_nab at hotmail.com
Fri Feb 10 18:25:04 PST 2012


On Saturday, 11 February 2012 at 01:31:29 UTC, Ali Çehreli wrote:
> Sorry for the double-post; I have asked the same question on 
> D.learn earlier but I think this is more of a question to this 
> forum.
>
> Tested on Ubuntu 11.10 64-bit dmd.
>
> The following program gets stuck during the writeln() call.
>
> - Note that the foo() call alone works fine.
>
> - Also note that the program works fine when there is no 
> writeln() call nor foo() call. All elements get processed in 
> that case and the results are ignored.
>
> Am I using taskPool.map incorrectly or is this a bug? Can you 
> help identify where the problem may be? How is writeln() using 
> the range differently than foo() to cause this behavior?
>
> import std.stdio;
> import std.parallelism;
> import core.thread;
>
> int func(int i)
> {
>    writeln("processing ", i);
>    return i;
> }
>
> void main()
> {
>    auto results = taskPool.map!func([1,2,3,4,5,6,7,8], 2);
>
>    writeln(results);  // <-- Gets stuck HERE
>
>    foo(results); // this works fine
> }
>
> void foo(R)(R range)
> {
>    for ( ; !range.empty; range.popFront()) {
>        writeln(range.front);
>    }
> }
>
> Thank you,
> Ali

For what I see, maybe that's because it's a "non-random access 
ranges". So to access "results", you need access from it's 
aggregate...

try this inside your main:


   foreach(int r; results)
       writeln(r);

//   foo(results); // this works fin





More information about the Digitalmars-d mailing list