LOCAL_C void TestCleanupStackL() { CDummyObserver* ob = new(ELeave)CDummyObserver; CleanupStack::PushL(ob); CMsvSession* session = CMsvSession::OpenSyncL(*ob); CleanupStack::PushL(session); CMsvEntry* cEntry = CMsvEntry::NewL(*session, KMsvDraftEntryId, TMsvSelectionOrdering()); CleanupStack::PushL(cEntry); TMsvEntry entry; entry.iType = KUidMsvMessageEntry; entry.iMtm = KUidMsvLocalServiceMtm; entry.iServiceId = KMsvLocalServiceIndexEntryId; // Create an entry cEntry->CreateL(entry); // Make sure heap failure occurs in CleanupEntryPushL // If a failure occurs the entry should still be on cleanup stack __UHEAP_FAILNEXT(0); TRAPD(error, session->CleanupEntryPushL(entry.Id()); session->CleanupEntryPop(); );