diff -r d2517372cc44 -r ae69c2e8bc34 syncmlfw/common/sosserver_clientapi/src/NSmlClientAPI.cpp --- a/syncmlfw/common/sosserver_clientapi/src/NSmlClientAPI.cpp Tue Sep 28 17:53:08 2010 +0530 +++ b/syncmlfw/common/sosserver_clientapi/src/NSmlClientAPI.cpp Fri Oct 15 11:46:45 2010 +0530 @@ -111,9 +111,26 @@ if ( res != KErrNone ) { res = LaunchServerL(); - User::LeaveIfError( res ); - res = CreateSession( KSOSServerName, KServerVersion, KDefaultMessageSlots ); + if ( res == KErrNone ) + { + res = CreateSession( KSOSServerName, KServerVersion, KDefaultMessageSlots ); } + else if ( res == KErrAlreadyExists ) + { + TInt retryCount = 3; + + while ( res != KErrNone && retryCount ) + { + res = CreateSession( KSOSServerName, KServerVersion, KDefaultMessageSlots ); + if( res != KErrNone ) + { + // wait 1.5 seconds to give the server a chance to reach its serviceable state + User::After( 1500000 ); + --retryCount; + } + } + } + } User::LeaveIfError( res ); @@ -139,10 +156,10 @@ if ( !iEventCallback ) { // callback not yet created, create - iEventCallback = new (ELeave) CSmlActiveCallback( *this ); + iEventCallback = new (ELeave) CSmlActiveCallback( *this ); } - iEventCallback->SetEventObserverL( aEventObserver ); + iEventCallback->SetEventObserverL( aEventObserver ); _DBG_FILE("RSyncMLSession::RequestEventL(): end"); } @@ -178,9 +195,10 @@ // callback not yet created, create iEventCallback = new (ELeave) CSmlActiveCallback( *this ); } - + iEventCallback->SetProgressObserverL( aProgressObserver ); - + + _DBG_FILE("RSyncMLSession::RequestProgressL(): end"); }