Thread overview | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
December 07, 2012 [Issue 9122] New: std.concurrency send() fails with multiple arrays | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=9122 Summary: std.concurrency send() fails with multiple arrays Product: D Version: D2 Platform: x86_64 OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: Phobos AssignedTo: nobody@puremagic.com ReportedBy: john.loughran.colvin@gmail.com --- Comment #0 from John Colvin <john.loughran.colvin@gmail.com> 2012-12-07 06:04:25 PST --- import std.concurrency; import std.stdio; void foo() { bool running = true; while(running) { receive( (immutable(double)[] a, immutable(double)[] b, int i) { writeln(a, b, i); }, (OwnerTerminated e) { running = false; } ); } } void main() { double[] a,b; a = [1.1]; b = [2.2]; int i= 3; auto tid = spawn(&foo); tid.send(a.idup, b.idup, i); } I get: core.exception.AssertError@ std/variant.d(277): target must be non-null -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
January 03, 2013 [Issue 9122] std.concurrency send() fails with multiple arrays | ||||
---|---|---|---|---|
| ||||
Posted in reply to John Colvin | http://d.puremagic.com/issues/show_bug.cgi?id=9122 David Eagen <david@eagen.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |david@eagen.com --- Comment #1 from David Eagen <david@eagen.com> 2013-01-03 04:44:21 PST --- This is probably related to issue 7069. The problem also occurs on structs like this: import std.concurrency, std.exception, std.stdio; struct Combined { string str1; string str2; bool status; } void main() { auto tid = spawn(&worker); Combined c = Combined("one", "two", false); tid.send(c); } void worker() { for (bool running = true; running; ) { receive( (Combined c) { writeln("Got ", c.str1, "\t", c.str2, "\t", c.status); }, (OwnerTerminated unused) { running = false; } ); } } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
January 03, 2013 [Issue 9122] std.concurrency send() fails with multiple arrays | ||||
---|---|---|---|---|
| ||||
Posted in reply to John Colvin | http://d.puremagic.com/issues/show_bug.cgi?id=9122 David Eagen <david@eagen.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Severity|normal |major --- Comment #2 from David Eagen <david@eagen.com> 2013-01-03 05:51:35 PST --- Bumping importance. This issue makes it impossible for me to move to 2.061 because it breaks all my applications that use message passing for concurrency. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
January 05, 2013 [Issue 9122] std.concurrency send() fails with multiple arrays | ||||
---|---|---|---|---|
| ||||
Posted in reply to John Colvin | http://d.puremagic.com/issues/show_bug.cgi?id=9122 David Eagen <david@eagen.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Severity|major |regression -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
March 31, 2013 [Issue 9122] std.concurrency send() fails with multiple arrays | ||||
---|---|---|---|---|
| ||||
Posted in reply to John Colvin | http://d.puremagic.com/issues/show_bug.cgi?id=9122 Martin Krejcirik <mk@krej.cz> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |mk@krej.cz --- Comment #3 from Martin Krejcirik <mk@krej.cz> 2013-03-31 15:59:08 PDT --- Code from comment #1 works for me in 32 bit, but I get the same error message ("target must be non-null") when the size of a message (Combined.sizeof) exceeds 24 bytes. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
April 19, 2013 [Issue 9122] std.concurrency send() fails with multiple arrays | ||||
---|---|---|---|---|
| ||||
Posted in reply to John Colvin | http://d.puremagic.com/issues/show_bug.cgi?id=9122 Zhenya Chapovsky <zheny@list.ru> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |zheny@list.ru --- Comment #4 from Zhenya Chapovsky <zheny@list.ru> 2013-04-19 10:02:44 PDT --- Is anyone working on this issue? -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
April 23, 2013 [Issue 9122] std.concurrency send() fails with multiple arrays | ||||
---|---|---|---|---|
| ||||
Posted in reply to John Colvin | http://d.puremagic.com/issues/show_bug.cgi?id=9122 Tavi Cacina <octavian.cacina@outlook.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |octavian.cacina@outlook.com --- Comment #5 from Tavi Cacina <octavian.cacina@outlook.com> 2013-04-23 11:45:43 PDT --- I hit this bug too as I wanted to send a structure. Martin Krejcirik was right about the size of the structure. As soon as the message to be sent exceeds 20 bytes (win32) it comes to the assert. I see that the problem is with the default generated opAssign for the struct Message in std.concurrency. This Message has a "Variant data" attribute that needs to be copied. I could reproduce the error like this: --- struct S { int p1, p2, p3, p4, p5, p6; } Variant v1 = S(); Variant v2; v2 = v1; // assert --- The Variant is defined like: alias VariantN!(maxSize!(creal, char[], void delegate())) Variant; so it has already a fixed size. The constructor can cope with the bigger size and will adjust, but the opAssign does not. I do not know if it is a bug that the constructor allows it or that the opAssign does not. A possible fix would be to add an opAssign operator to the Message structure: --- ref Message opAssign(Message rhs) { type = rhs.type; swap(data, rhs.data); return this; } --- -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
May 15, 2013 [Issue 9122] std.concurrency send() fails with multiple arrays | ||||
---|---|---|---|---|
| ||||
Posted in reply to John Colvin | http://d.puremagic.com/issues/show_bug.cgi?id=9122 Martin Nowak <code@dawg.eu> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |code@dawg.eu --- Comment #6 from Martin Nowak <code@dawg.eu> 2013-05-14 20:07:55 PDT --- (In reply to comment #5) > The Variant is defined like: > alias VariantN!(maxSize!(creal, char[], void delegate())) Variant; > so it has already a fixed size. The constructor can cope with the bigger size > and will adjust, but the opAssign does not. OpAssign moves the assigned value onto the heap so this is not the problem. https://github.com/D-Programming-Language/phobos/blob/c319b1578f28e00124d2f0c2a492790d01ca5159/std/variant.d#L545 Also the following code works correctly for me on 2.062. --- import std.variant, std.stdio; struct S { int p1, p2, p3, p4, p5, p6; } void main() { Variant v1 = S(1, 2, 3, 4, 5, 6); writeln(v1); Variant v2; writeln(v2); v2 = v1; // assert writeln(v2); } --- The bug seems to be in the handler for OpID.copyOut. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
May 15, 2013 [Issue 9122] std.concurrency send() fails with multiple arrays | ||||
---|---|---|---|---|
| ||||
Posted in reply to John Colvin | http://d.puremagic.com/issues/show_bug.cgi?id=9122 Tavi Cacina <octavian.cacina@outlook.com> changed: What |Removed |Added ---------------------------------------------------------------------------- See Also| |http://d.puremagic.com/issu | |es/show_bug.cgi?id=10017 --- Comment #7 from Tavi Cacina <octavian.cacina@outlook.com> 2013-05-14 23:54:37 PDT --- (In reply to comment #6) > > Also the following code works correctly for me on 2.062. yes, here I have a wrong sample, the structure size must exceed 32bytes. The S should be: struct S { int[9] s; } See #10017 - Can not assign to a Variant another Variant holding a bigger structure I also made a pull request for it ( https://github.com/D-Programming-Language/phobos/pull/1281 ) but David Nadlinger wants to fix the fact that these Variant assignments trigger a reallocation even if there already is a heap value (comments in pull). -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
May 28, 2013 [Issue 9122] std.concurrency send() fails with multiple arrays | ||||
---|---|---|---|---|
| ||||
Posted in reply to John Colvin | http://d.puremagic.com/issues/show_bug.cgi?id=9122 --- Comment #8 from David Eagen <david@eagen.com> 2013-05-27 18:10:07 PDT --- This is now resolved after the fix for 10017 (https://github.com/D-Programming-Language/phobos/commit/5ddf3bc19a240b77255c9583aee3d35a9157cd8c) on x86_64 Linux. -- 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