June 03, 2013
On 06/03/2013 12:30 AM, Alexandr Druzhinin wrote:

> if child thread throws an exception,
> should it print some diagnostic message to clear that it crashed or no?

No, the parent does not know about such a termination. These are the following options that I know of:

1) The exceptions can be caught by the child and sent to the owner explicitly as a special message that both understand.

Or the exception can directly be passed as a message:

2)
    try {
        // ...

    } catch (shared(Exception) exc) {
        owner.send(exc);
    },

The owner receives that message just like a message:

    receive(
        // ...

        (shared(Exception) exc) {
            throw exc;
        });

The code above re-throws the child's exception in the owner's context but it could do anything else as well.

There are also the following exceptions that are related to std.concurrency:

* MessageMismatch
* OwnerTerminated
* LinkTerminated
* MailboxFull
* PriorityMessageException

I have some examples here:

  http://ddili.org/ders/d.en/concurrency.html

Ali

June 04, 2013
31.05.2013 8:56, Alexandr Druzhinin пишет:
> Hello
> I have code like this:
>
> class SomeClass {
> ubyte[] data_;
>
> ...
>
>      auto getObjectType() const {
>          if(data_ is null) {
>              writeln("throwing");
>              throw new Exception("Here the exception should be thrown!");
>          }
>          KeyHeaderHelper value_header;
>          value_header.ptr_ = cast(ubyte*) data_.ptr;
>          return value_header.object_type;
>      }
> }
>
> When data_ is null the application just prints "throwing" and hangs up
> without an exception throwing. I don't know how to handle this. May be I
> did something wrong? If so then what?

Rephrase my question - I have a function getObjectType, that throws an exception. Unittest is ok. But in more complex use case, this function doesn't throw exception and just hangs up. If I brace the function call by try/catch then an exception is throw again. But I guess exception have to be thrown in any case.
June 04, 2013
04.06.2013 19:18, Alexandr Druzhinin пишет:
> 31.05.2013 8:56, Alexandr Druzhinin пишет:
>> Hello
>> I have code like this:
>>
>> class SomeClass {
>> ubyte[] data_;
>>
>> ...
>>
>>      auto getObjectType() const {
>>          if(data_ is null) {
>>              writeln("throwing");
>>              throw new Exception("Here the exception should be thrown!");
>>          }
>>          KeyHeaderHelper value_header;
>>          value_header.ptr_ = cast(ubyte*) data_.ptr;
>>          return value_header.object_type;
>>      }
>> }
>>
>> When data_ is null the application just prints "throwing" and hangs up
>> without an exception throwing. I don't know how to handle this. May be I
>> did something wrong? If so then what?
>
> Rephrase my question - I have a function getObjectType, that throws an
> exception. Unittest is ok. But in more complex use case, this function
> doesn't throw exception and just hangs up. If I brace the function call
> by try/catch then an exception is throw again. But I guess exception
> have to be thrown in any case.
Oh, no.. If I do

...
try {
	auto foo =  some_class_instance.getObjectType();
}
catch(Throwable t) {
	writeln(t.msg); // print exception, no hanging
	throw t;	// hangs again
}
...
all happens in the main thread.
1 2
Next ›   Last »