Thread overview | |||||
---|---|---|---|---|---|
|
August 01, 2013 [Issue 10740] New: std.concurrency send() fails with structs over 32 bytes | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=10740 Summary: std.concurrency send() fails with structs over 32 bytes Product: D Version: D2 Platform: x86_64 OS/Version: Linux Status: NEW Severity: major Priority: P2 Component: Phobos AssignedTo: nobody@puremagic.com ReportedBy: david@eagen.com --- Comment #0 from David Eagen <david@eagen.com> 2013-07-31 21:44:11 PDT --- Using 2.063.2 and 2.064-devel-333c6dd: import std.concurrency : receiveOnly, send, thisTid; import std.exception : assumeUnique; import std.variant; struct JustRight { byte[32] j; } struct TooBig { byte[33] t; } void main() { JustRight[1] jArray; TooBig[1] tArray; Variant vj = jArray[]; Variant vt = tArray[]; thisTid.send(vj); thisTid.send(vt); thisTid.send(assumeUnique(jArray[])); //thisTid.send(assumeUnique(tArray[])); // Fails to compile auto received = receiveOnly!((JustRight)[]); } If the send of tArray is commented out the compilation fails with: src/phobos/std/variant.d(558): Error: cannot modify immutable expression *p So, 32-byte structs can be sent (as arrays) using send or if you first wrap it in an Variant object. Greater than 32-byte structs can be sent ONLY if they are pre-wrapped in a Variant. The size of the data shouldn't limit it from being sent using send(). -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
August 01, 2013 [Issue 10740] std.concurrency send() fails with structs over 32 bytes | ||||
---|---|---|---|---|
| ||||
Posted in reply to David Eagen | http://d.puremagic.com/issues/show_bug.cgi?id=10740 --- Comment #1 from David Eagen <david@eagen.com> 2013-08-01 04:33:47 PDT --- Should have said: "If the send of tArray is uncommented the compilation fails with:" -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
August 24, 2013 [Issue 10740] std.concurrency send() fails with structs over 32 bytes | ||||
---|---|---|---|---|
| ||||
Posted in reply to David Eagen | http://d.puremagic.com/issues/show_bug.cgi?id=10740 Johannes Pfau <johannespfau@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |johannespfau@gmail.com --- Comment #2 from Johannes Pfau <johannespfau@gmail.com> 2013-08-24 06:08:34 PDT --- There recently was a bug report for GDC/ARM regarding this. As variants max size is determined by creal which is only 16 bytes on most non-x86 architectures this error already happens with structs > 16 bytes on these architectures. Another test case with different error message: --------- struct Big { int[10] a; } import std.concurrency, std.variant, core.thread; void loop() { while(true) { Thread.sleep(seconds(10)); } } void main() { auto x = spawn(&loop); x.send(Big()); } --------- http://dpaste.dzfl.pl/f103dbac core.exception.AssertError@/opt/compilers/dmd2/include/std/variant.d(280): target must be non-null -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
Copyright © 1999-2021 by the D Language Foundation