diff -r e5af45d51884 -r 31fccae4f8a7 uiacceltk/hitchcock/ServerCore/Src/alfstaticfactory.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfstaticfactory.cpp Tue Aug 31 16:07:35 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfstaticfactory.cpp Wed Sep 01 12:16:53 2010 +0100 @@ -69,7 +69,12 @@ iPtr(ptr), iSession(aSession) {} - + + void ClearPtr() + { + iPtr = NULL; + } + TBool OfferEventL(const THuiEvent& aEvent) { if ( aEvent.IsPointerEvent() ) @@ -116,9 +121,13 @@ ~CAlfControl2() { - *iPtr = 0; + // iPtr might have been cleared previously + if (iPtr != NULL) + { + *iPtr = 0; + } - // Remove possbile pointer observers + // Remove possible pointer observers if ( Env().DisplayCount() ) { CHuiDisplay& disp = Env().PrimaryDisplay(); // assume one display @@ -144,7 +153,14 @@ void HandleCmdL(TInt aCommandId, const TDesC8& aInputBuffer, TDes8& aResponse); CAlfControl2* iControl; ~CAlfControlHandler() - { + { + // Clear the control's iPtr so that it wouldn't be left as dangling pointer + // and cause potential memory corruption + if (iControl != NULL) + { + iControl->ClearPtr(); + } + if (iControl && !iControl->ControlGroup()) { delete iControl;