Sending Tid in a struct

Timon Gehr timon.gehr at gmx.ch
Sat Mar 3 09:35:12 PST 2012


On 03/03/2012 12:09 PM, Nicolas Silva wrote:
> Hi,
>
> I'm trying to send structs using std.concurrency. the struct contains
> a Tid (the id of the sender) so that the receiver can send an answer.
>
> say:
>
> struct Foo
> {
>    Tid tid;
>    string str;
> }
>
> // ...
>
> Foo f = {
>    tid: thisTid,
>    str: "hello!"
> };
> std.concurrency.send(someThread, f);
> // /usr/include/d/dmd/phobos/std/concurrency.d(465): Error: static
> assert  "Aliases to mutable thread-local data not allowed."
> // hello.d(15):        instantiated from here: send!(Foo)
>
> However, I can send a Tid if I pass it directly as a parameter of the
> send function instead of passing it within a struct.
>
> Is this a bug ? It looks like so to me but I guess I could have missed
> something.
>
> thanks in advance,
>
> Nicolas

Yes, this seems to be a bug.

Workaround:

struct Foo{
     string s;
     Tid id;
}

void foo(){
     Foo foo;
     receive((Tuple!(string,"s",Tid,"id") bar){foo=Foo(bar.s,bar.id);});
}

void main(){
     auto id = spawn(&foo);
     id.send("string",id);
     ...
}


More information about the Digitalmars-d-learn mailing list