uiacceltk/hitchcock/ServerCore/Src/alfstaticfactory.cpp
branchRCL_3
changeset 52 31fccae4f8a7
parent 51 e5af45d51884
--- 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;