diff -r ecff51f1e7fb -r 8a14024f954a stif/TestServer/src/TestServerClient.cpp --- a/stif/TestServer/src/TestServerClient.cpp Fri Mar 12 15:50:45 2010 +0200 +++ b/stif/TestServer/src/TestServerClient.cpp Mon Mar 15 12:46:13 2010 +0200 @@ -103,16 +103,37 @@ { TFileName serverName; - TInt ret; + TInt ret = KErrNone; - // Create global semaphore start-up + // Create global semaphore start-up. It will be indexed (if given name already exsists, index will be increased) RSemaphore startSemaphore; TName semaphoreName = _L("startupSemaphore"); semaphoreName.Append( aModuleName ); - ret = startSemaphore.CreateGlobal( semaphoreName, 0); - if ( ret != KErrNone ) + TInt x = 0; + RBuf semName; + ret = semName.Create(KMaxName); + if(ret != KErrNone) + { + RDebug::Print(_L("RTestServer::Connect() Could not create buffer for semaphore name [%d]"), ret); + return ret; + } + do { - startSemaphore.Close(); + semName.Format(_L("%S%d"), &semaphoreName, x); + ret = startSemaphore.CreateGlobal(semName, 0); + RDebug::Print(_L("RTestServer::Connect() Creating global semaphore [%S] with result [%d]"), &semName, ret); + if(ret != KErrAlreadyExists) + { + semaphoreName.Copy(semName); + break; + } + x++; + } while (ETrue); + semName.Close(); + + if ( ret != KErrNone ) + { + startSemaphore.Close(); return ret; } @@ -129,7 +150,18 @@ RProcess pr; - ret = KErrNone; + // Data to be passed to new process. It will contain module name and synchronization semaphore name separated with space. + // I.e. it will be: "mymodule startupSemaphore0" + RBuf data; + ret = data.Create(KMaxName); + if(ret != KErrNone) + { + RDebug::Print(_L("RTestServer::Connect() Could not create buffer for data to be passed to process [%d]"), ret); + return ret; + } + data.Format(_L("%S %S"), &aModuleName, &semaphoreName); + RDebug::Print(_L("RTestServer::Connect() Data for new process prepared [%S]"), &data); + // Indication is Create() operation needed TBool doCreate( ETrue ); @@ -138,11 +170,11 @@ // Create without path(Uses Symbian default path). // Note: If TestScriter used then module name is format: // testscripter_testcasefilename - ret = pr.Create( aModuleName, aModuleName ); + + ret = pr.Create( aModuleName, data ); if( ret == KErrNone ) { - RDebug::Print( _L( "Combination (1): Caps modifier[%S], Module[%S]" ), - &aModuleName, &aModuleName ); + RDebug::Print(_L("RTestServer::Connect() Combination (1): Caps modifier [%S], Data [%S]"), &aModuleName, &data); doCreate = EFalse; } #endif // __WINS__ @@ -161,17 +193,16 @@ ret_caps = GetCapsModifier( aConfigFile, capsModifierName ); if( ret_caps != KErrNone ) { - RDebug::Print( _L( "Caps modifier was not defined. Default modifier will be used" ) ); + RDebug::Print( _L( "RTestServer::Connect() Caps modifier was not defined. Default modifier will be used" ) ); } else { #ifdef __WINS__ // CodeWarrior(emulator) // Create without path(Uses Symbian default path) - ret = pr.Create( capsModifierName, aModuleName ); + ret = pr.Create( capsModifierName, data ); if( ret == KErrNone ) { - RDebug::Print( _L( "Combination (2): Caps modifier[%S], Module[%S]" ), - &capsModifierName, &aModuleName ); + RDebug::Print( _L( "RTestServer::Connect() Combination (2): Caps modifier [%S], Data [%S]"), &capsModifierName, &data); doCreate = EFalse; } #endif // __WINS__ @@ -200,7 +231,7 @@ if( find_ret != KErrNone ) { // Module was not found, using default exe: testserverstarter.exe - RDebug::Print( _L( "Correct caps modifier module not found, capabilities cannot set" ) ); + RDebug::Print( _L( "RTestServer::Connect() Correct caps modifier module not found, capabilities cannot set" ) ); if ( aModuleName.Find( _L( "testscripter_ui_" ) ) == 0 ) { pathAndExeModule.Copy( KDefaultUiExeName ); @@ -213,8 +244,9 @@ if( trapd_ret != KErrNone ) { // FindExeL fails - RDebug::Print( _L( "Caps modifier module searching fails with error: %d" ), trapd_ret ); + RDebug::Print( _L( "RTestServer::Connect() Caps modifier module searching fails with error: %d" ), trapd_ret ); startSemaphore.Close(); + data.Close(); return trapd_ret; } @@ -222,16 +254,17 @@ if ( doCreate ) { - ret = pr.Create( pathAndExeModule, aModuleName ); + ret = pr.Create( pathAndExeModule, data ); RDebug::Print( - _L( "Combination (3): Caps modifier[%S], Module[%S]. Result: %d" ), - &pathAndExeModule, &aModuleName, ret ); + _L( "RTestServer::Connect() Combination (3): Caps modifier [%S], Data [%S], Result [%d]" ), + &pathAndExeModule, &data, ret ); } - + data.Close(); + if ( ret != KErrNone ) { - startSemaphore.Close(); + startSemaphore.Close(); return ret; }