Re: Detecting premature end of spawned threads with std.concurrency

2015-09-10 Thread Ali Çehreli via Digitalmars-d-learn

On 09/03/2015 02:20 PM, Matt Kline wrote:
> neither the docs nor the current Phobos implementation
> make any mention of such exceptions.

There is LinkTerminated but you must use spawnLinked():

  http://dlang.org/phobos/std_concurrency.html#.LinkTerminated

  http://ddili.org/ders/d.en/concurrency.html#ix_concurrency.LinkTerminated

Ali



Re: Detecting premature end of spawned threads with std.concurrency

2015-09-04 Thread Steven Schveighoffer via Digitalmars-d-learn

On 9/3/15 5:20 PM, Matt Kline wrote:

TDPL suggests that calls to std.concurrency.send will fail with an
"OwnedTerminated" or "OwnedFailed" exception if the destination thread
has exited, but neither the docs nor the current Phobos implementation
make any mention of such exceptions. Thinking the information was just
outdated, I searched the Git history of Phobos for such types, but found
nothing.

What are current best practices for determining if a child thread has
died? And should these types be added to TDPL errata?


It seems this is not handled.

Looking here:

https://github.com/D-Programming-Language/phobos/blob/master/std/concurrency.d#L506

spawn creates the thread, then calls the function, but never sets a flag 
indicating when the thread is done. This could be added quite easily by 
adding a scope(exit) to the executed function (exec). It would not 
happen if the thread is terminated abnormally, but any thrown exception 
should trigger the flag. I'll note that the MessageBox class has a 
close() method that seems like it could be called.


Anyone want to make a PR? And no, I'm not going to :)

-Steve


Re: Detecting premature end of spawned threads with std.concurrency

2015-09-04 Thread Matt Kline via Digitalmars-d-learn

On Friday, 4 September 2015 at 08:33:08 UTC, Marc Schütz wrote:

They're called `OwnerTerminated` and `OwnerFailed` with an "r".


No, that's received by the child if the owning thread exits. I'm 
talking about the "parent" thread attempting to send to a child 
thread that has exited.


Relevant passage in TDPL: 
https://books.google.com/books?id=bn7GNq6fiIUC=PT602


Re: Detecting premature end of spawned threads with std.concurrency

2015-09-04 Thread via Digitalmars-d-learn

On Thursday, 3 September 2015 at 21:20:59 UTC, Matt Kline wrote:
TDPL suggests that calls to std.concurrency.send will fail with 
an "OwnedTerminated" or "OwnedFailed" exception if the 
destination thread has exited, but neither the docs nor the 
current Phobos implementation make any mention of such 
exceptions. Thinking the information was just outdated, I 
searched the Git history of Phobos for such types, but found 
nothing.


What are current best practices for determining if a child 
thread has died? And should these types be added to TDPL errata?


They're called `OwnerTerminated` and `OwnerFailed` with an "r".


Detecting premature end of spawned threads with std.concurrency

2015-09-03 Thread Matt Kline via Digitalmars-d-learn
TDPL suggests that calls to std.concurrency.send will fail with 
an "OwnedTerminated" or "OwnedFailed" exception if the 
destination thread has exited, but neither the docs nor the 
current Phobos implementation make any mention of such 
exceptions. Thinking the information was just outdated, I 
searched the Git history of Phobos for such types, but found 
nothing.


What are current best practices for determining if a child thread 
has died? And should these types be added to TDPL errata?