diff -r 000000000000 -r 2c201484c85f cryptoservices/filebasedcertificateandkeystores/source/generic/server/tokenserverdebug.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cryptoservices/filebasedcertificateandkeystores/source/generic/server/tokenserverdebug.cpp Wed Jul 08 11:25:26 2009 +0100 @@ -0,0 +1,116 @@ +/* +* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* tokenserverdebug.h +* +*/ + + +#ifdef _DEBUG + +#include "tokenserverdebug.h" +#include + +TInt TokenServerDebug::iCounter = 0; +TInt TokenServerDebug::iStartCount = 0; +TInt TokenServerDebug::iPauseCount = 0; +TInt TokenServerDebug::iInitialAllocCount = 0; + +_LIT(KHeapErrorFile, "\\fsserver_heap_error"); + +void TokenServerDebug::StartOOMTest() + { + iStartCount = User::CountAllocCells(); + iCounter = 0; + } + +void TokenServerDebug::IncHeapFailPoint() + { + __UHEAP_FAILNEXT(iCounter); + ++iCounter; + } + +void TokenServerDebug::ResetHeapFail() + { + __UHEAP_RESET; + } + +void TokenServerDebug::PauseOOMTest() + { + ASSERT(iPauseCount == 0); // Don't nest + if (iCounter) + { + __UHEAP_RESET; + iPauseCount = User::CountAllocCells(); + } + } + +void TokenServerDebug::ResumeOOMTest() + { + if (iCounter) + { + ASSERT(iPauseCount > 0); + __UHEAP_FAILNEXT(iCounter - (iPauseCount - iStartCount)); + iPauseCount = 0; + } + } + +void TokenServerDebug::HeapCheckStart() + { + iInitialAllocCount = User::CountAllocCells(); + } + +void TokenServerDebug::HeapCheckEnd() + { + TInt finalAllocCount = User::CountAllocCells(); + TRAP_IGNORE(HeapErrorL(finalAllocCount != iInitialAllocCount)); + // ignore errors + } + +/** + * Write or delete a file to signify to the test code that there's a memory leak + * in the server. This is unfortunately the best way of doing it since we can't + * trap a panic when the server's shutting down. + */ +void TokenServerDebug::HeapErrorL(TBool aError) + { + RFs fs; + User::LeaveIfError(fs.Connect()); + + TDriveUnit sysDrive (fs.GetSystemDrive()); + TDriveName driveName(sysDrive.Name()); + TFileName heapErrFile (driveName); + heapErrFile.Append(KHeapErrorFile); + + if (aError) + { + RFile file; + TInt err = file.Create(fs, heapErrFile, EFileWrite | EFileShareExclusive); + if (err != KErrNone || err != KErrAlreadyExists) + { + User::Leave(err); + } + file.Close(); + } + else + { + TInt err = fs.Delete(heapErrFile); + if (err != KErrNone && err != KErrNotFound) + { + User::Leave(err); + } + } + } + +#endif