On Thursday, 24 January 2013 at 17:12:49 UTC, Sean Kelly wrote:
On Jan 24, 2013, at 5:58 AM, "monarch_dodra"
<[email protected]> wrote:
On Thursday, 24 January 2013 at 13:45:18 UTC, David Nadlinger
wrote:
On Thursday, 24 January 2013 at 10:57:26 UTC, Stephan wrote:
So my first question is: Where does the LinkTerminated
Exception come from, when the only functions from
std.concurrency that I use are "spawn" and "receiveOnly".
To track this down, what about looking at the std.concurrency
source and placing a breakpoint at the appropriate line in
MessageBox.get()?
David
Yeah, I've been playing with std.concurrency too lately, and
getting random bugs. I'll try to formalize them into formal
requests.
BTW: Question: Is "LinkTerminated" a priority message? I've
been avoiding using SpawnLinked because I've been unable to
effectively end my workers. Maybe I just suck though...
It's a control message. These are messages generated
automatically by std.concurrency rather than sent by the user.
They live in the normal message queue and so are processed when
receive doesn't find a match earlier in the queue. The idea is
that if an owner sends a spawned thread a bunch of messages,
the spawned thread should have an opportunity to process those
messages before receiving an OwnerTerminated message. Making
them priority messages would make designing predictable
algorithms difficult.
OK. TY.
I'll try to reproduce, but I'm 90% sure my reduced code was this:
//----
void worker(Tid owner)
{
owner.send(1);
}
void main()
{
spawnLinked(&worker, thisTid);
receive(
(int a){}
);
}
//----
And it (50% of the time) terminated in a LinkTerminated exception
being thrown.
Any quick thoughts? I'll investigate on my end depending on your
explanation.