On 08/17/2013 11:53 PM, Jiří Zárevúcky wrote:
> async_exchange_begin()
> 
> What happens when the remote server has crashed?
> I can see from the code that it internally calls
> async_connect_me_to_internal(), which should fail in that case. It seems
> the function can loop infinitely if the call keeps failing, but I never
> saw such behavior at runtime. Is that because the already existing
> phones don't get discarded even after the connection is broken?

This is only for parallel exchanges, right? You are right that there
appears not to be a way for async_exchange_begin() to realize the other
side is not there.

I think it will have a couple of unsuccessful attempts to recycle an
inactive exchange from other sessions and then it will block on a
condition variable, waiting for some new inactive exchanges to appear,
resulting in a hang.

Perhaps a simple check for EHANGUP and ENOENT, or just any other hint
from async_connect_me_to_internal(), could help here.

When a connection is broken, the existing phones are slammed, but not
hung up. In other words, attempts to make a call using a slammed phone
will fail, but such a phone cannot be recycled until it is hung up first
by the task.

Jakub

_______________________________________________
HelenOS-devel mailing list
[email protected]
http://lists.modry.cz/listinfo/helenos-devel

Reply via email to