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

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to