diff -r a3a1ae9acec6 -r da5135c61bad emailservices/emailclientapi/src/emailclientapiimpl.cpp --- a/emailservices/emailclientapi/src/emailclientapiimpl.cpp Mon Mar 15 12:39:10 2010 +0200 +++ b/emailservices/emailclientapi/src/emailclientapiimpl.cpp Wed Mar 31 21:08:33 2010 +0300 @@ -39,6 +39,7 @@ #include "emailclientapi.hrh" #include "freestyleemailcenrepkeys.h" #include "FreestyleEmailUiConstants.h" + // --------------------------------------------------------------------------- // CEmailClientApi::MailboxL // --------------------------------------------------------------------------- @@ -201,11 +202,20 @@ // ----------------------------------------------------------------------------- CEmailClientApi* CEmailClientApi::NewL() { - CEmailClientApi* self = new ( ELeave ) CEmailClientApi(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); - return self; + CEmailClientApi* instance = static_cast( Dll::Tls() ); + + if ( instance == NULL ) + { + instance = new ( ELeave ) CEmailClientApi(); + CleanupStack::PushL( instance ); + instance->ConstructL(); + User::LeaveIfError( Dll::SetTls( instance ) ); + CleanupStack::Pop(); + } + + instance->iInstanceCounter++; + + return instance; } // ----------------------------------------------------------------------------- @@ -226,12 +236,13 @@ iLoadedPluginsArray.Close(); delete iMailboxCache; delete iClientAPI; + Dll::FreeTls(); } // ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- -CEmailClientApi::CEmailClientApi() +CEmailClientApi::CEmailClientApi() : iInstanceCounter( 0 ) { } @@ -297,7 +308,14 @@ // ----------------------------------------------------------------------------- void CEmailClientApi::Release() { - delete this; + if( this->iInstanceCounter == 1 ) + { + delete this; + } + else + { + this->iInstanceCounter--; + } } // -----------------------------------------------------------------------------