Re: Sending Tid in a struct

2018-09-28 Thread Chris Katko via Digitalmars-d-learn
On Wednesday, 23 November 2016 at 08:47:56 UTC, Christian Köstlin 
wrote:

On 03/03/2012 18:35, Timon Gehr wrote:

On 03/03/2012 12:09 PM, Nicolas Silva wrote:

[...]


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();
id.send("string",id);
...
}
I had a similar problem with this an it seems this is still a 
bug with dmd 2.072.


best regards,
christian


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?


Re: Sending Tid in a struct

2016-11-23 Thread Christian Köstlin via Digitalmars-d-learn
On 03/03/2012 18:35, Timon Gehr wrote:
> 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();
> id.send("string",id);
> ...
> }
I had a similar problem with this an it seems this is still a bug with
dmd 2.072.

best regards,
christian




Re: Sending Tid in a struct

2012-03-03 Thread Timon Gehr

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);
...
}