There is a bug here I believe - if GetPhoneId() completes with an error, then CActiveScheduler::Stop() never gets called, and so the Start() in ConstructL() never returns...... hang.
Shouldn't Stop() be called even if GetPhoneId() completes with an error?