digitalmars.D.learn - Sending Tid in a struct
- Nicolas Silva (24/24) Mar 03 2012 Hi,
 - Timon Gehr (16/40) Mar 03 2012 Yes, this seems to be a bug.
 - =?UTF-8?Q?Christian_K=c3=b6stlin?= (5/59) Nov 23 2016 I had a similar problem with this an it seems this is still a bug with
 - Chris Katko (6/34) Sep 28 2018 So this appears to still be a bug in 2.078.0-beta.1. Sigh...
 
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
 Mar 03 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);
     ...
}
 Mar 03 2012
On 03/03/2012 18:35, Timon Gehr wrote:On 03/03/2012 12:09 PM, Nicolas Silva wrote:I had a similar problem with this an it seems this is still a bug with dmd 2.072. best regards, christianHi, 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, NicolasYes, 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); ... }
 Nov 23 2016
On Wednesday, 23 November 2016 at 08:47:56 UTC, Christian Köstlin wrote:On 03/03/2012 18:35, Timon Gehr wrote:So this appears to still be a bug in 2.078.0-beta.1. Sigh... So the only way to actually use concurrency in D... is to use this hack? Or has it been fixed since January? Is there an official bug report?On 03/03/2012 12:09 PM, Nicolas Silva wrote:I had a similar problem with this an it seems this is still a bug with dmd 2.072. best regards, christian[...]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); ... }
 Sep 28 2018








 
 
 
   Chris Katko <ckatko gmail.com>