concurrency send() error

John Colvin john.loughran.colvin at gmail.com
Fri Dec 7 04:40:34 PST 2012


I was messing about with std.concurrency and ran in to this: 
http://dpaste.dzfl.pl/5655cbbe

copied out for those who don't want to go to dpaste:

import std.concurrency;
import std.stdio;

void main() {
     double[] a,b;
     a = [1.1];
     b = [2.2];
     int i= 3;

     auto tid = spawn(&foo);
	
     tid.send(a.idup, b.idup);    //works, no problem

     tid.send(a.idup, i);	 //so does this

     tid.send(a.idup, b.idup, i); //core.exception.AssertError@ 
std/variant.d(277): target must be non-null

}

void foo() {
     bool running  = true;
     while(running) {
      	receive(
	    (immutable(double)[] a, int i) {
		writeln(a, i);
	    },
	    (immutable(double)[] a, immutable(double)[] b, int i) {
		writeln(a, b, i);
	    },
	    (immutable(double)[] a, immutable(double)[] b) {
		writeln(a, b);
	    },
	    (OwnerTerminated e) {
		running = false;
	    }
	);
     }
}

This seems like a bug to me, but I don't know std.concurrency 
well enough to be sure.


More information about the Digitalmars-d-learn mailing list