On Fri, 2018-06-01 at 18:30 +0100, Russel Winder wrote: > […] > > I'll trim this sample code down to the minimum so it can be used in > the > test suite of Phobos creating a red. >
Here it is, a small bit of code that breaks Phobos' std.concurrency.receive. import core.thread: Thread; import core.time: seconds; import std.concurrency: Tid, OwnerTerminated, receive, receiveTimeout, send, spawn; import std.conv: to; import std.stdio: writeln; struct Datum { public const int a; public const int b; } struct Message { Datum datum; } void sender(Tid receiver) { writeln("Sender sending."); receiver.send(Message(Datum(0, 0))); writeln("Sender finished."); } void receiver() { writeln("Receiver going into receive."); try { receive( (Message message) { writeln("Receiver received ", to!string(message)); }, ); } catch (Throwable t) { writeln("Receiver receive threw " ~ to!string(t)); } writeln("Receiver finished."); } void mainloop() { Thread.sleep(2.seconds); } int main() { auto receiver = spawn(&receiver); spawn(&sender, receiver); mainloop(); return 0; } -- Russel. =========================================== Dr Russel Winder t: +44 20 7585 2200 41 Buckmaster Road m: +44 7770 465 077 London SW11 1EN, UK w: www.russel.org.uk
signature.asc
Description: This is a digitally signed message part