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
