This post is not a query, but rather to draw your attention to a strange behavior that we faced with and couldn't really solve. Perhaps some wise people also comment on the topic making it more valuable.

So, we developed a product to exchange data over CSD. We established a call with RCall:: Dial and loaned data port with RCall::LoanDataPort. The problem with the second method is that it returns with KErrNone even if the data call got terminated in the mean time.

And that means that we have to either monitor the call status continuously or check the status at least after LoanDataPort. We decided to do the former first and we were surprised about the result: our code always caused the phone to reboot when we were running two asynchronous calls (RCall::NotifyStatusChange and RCall:: Dial/LoanDataPort) in parallel. The code worked properly when we didn't observed the call status (i.e. didn't use RCall::NotifyStatusChange). This behavior led us to think that a system critical process, namely ETel, couldn't cope with (these) two async requests at the same time. It is very odd, to be honest. ETel should be able to handle multiple requests at the same time and there is no indication on whether it would be otherwise.

The solution that we used is that we didn't monitor the call status continuously, but checked it after LoanDataPort returned: since we couldn't rely solely on the status code LoanDataPort has set we had to make it sure that we don't proceed further with a call that is not active anymore.

Any comments are welcome!