diff -r c9d868f1e20c -r 1801340c26a2 uiacceltk/hitchcock/ServerCore/Src/alfstaticfactory.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfstaticfactory.cpp Thu Jul 15 19:40:07 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfstaticfactory.cpp Thu Aug 19 10:48:02 2010 +0300 @@ -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;