diff -r d2517372cc44 -r ae69c2e8bc34 syncmlfw/dm/treedbclient/src/nsmldmtreedbclient.cpp --- a/syncmlfw/dm/treedbclient/src/nsmldmtreedbclient.cpp Tue Sep 28 17:53:08 2010 +0530 +++ b/syncmlfw/dm/treedbclient/src/nsmldmtreedbclient.cpp Fri Oct 15 11:46:45 2010 +0530 @@ -111,13 +111,29 @@ result = CreateSession( KNSmlDmCallbackServerName, ver ); if(result!=KErrNone) - { + { TRAPD(error, result = LaunchServerL()); if ( (error == KErrNone) && ( result == KErrNone ) ) { result = CreateSession( KNSmlDmCallbackServerName, ver ); } + else if ( result == KErrAlreadyExists ) + { + TInt retryCount = 3; + + while ( result != KErrNone && retryCount ) + { + result = CreateSession( KNSmlDmCallbackServerName, ver ); + if( result != KErrNone ) + { + // wait 1.5 seconds to give the server a chance to reach its serviceable state + User::After( 1500000 ); + --retryCount; + } + } } + } + User::LeaveIfError( result ); return result; }