uiacceltk/hitchcock/ServerCore/Src/alfstreamerserver.cpp
branchRCL_3
changeset 52 31fccae4f8a7
parent 51 e5af45d51884
--- a/uiacceltk/hitchcock/ServerCore/Src/alfstreamerserver.cpp	Tue Aug 31 16:07:35 2010 +0300
+++ b/uiacceltk/hitchcock/ServerCore/Src/alfstreamerserver.cpp	Wed Sep 01 12:16:53 2010 +0100
@@ -227,14 +227,19 @@
 CAlfStreamerServer::~CAlfStreamerServer()
     {
     delete iThemesListener;
-    delete iWindowMgr;
     delete iWindowHierarcy;
+    iWindowHierarcy = NULL;
     iCompositionSessions.Close();
     iCompositionHostSessions.Close();
     iCompositionTokens.Close();
     iWindowServerSessions.Close();
     iAlfTargets.Close();
     iOptionalGRAM.Close();
+    iSignals.Close();
+     // Remove "effectpluginnotunloaded" from 10282CAF.rss in order to really unload effect plugin
+    // iWindowMgr->DestroyPlugin(TUid::Uid(0x2001e2cf)); // effects plugin. window manager needed for unloading.
+    delete iWindowMgr;
+    iWindowMgr = NULL;
     }
 
 void CAlfStreamerServer::AppendCompositionSessionL(CAlfStreamerServerSession* aSession, TBool aHost)
@@ -797,6 +802,12 @@
     TInt i = 0;
     RImplInfoPtrArray pluginArray;
     REComSession::ListImplementationsL( KAlfGfxPluginInterfaceUId, pluginArray );    
+    CAlfWindowManager* windowMgr = NULL;
+    if (Server())
+        {
+        windowMgr = ((CAlfStreamerServer*)(Server()))->WindowMgr();
+        }
+            
     for ( i = iLoadedPlugins.Count() - 1; i >= 0; i-- )
         {
         TInt j = 0;    
@@ -805,9 +816,9 @@
             TUid loaded = TUid::Uid(iLoadedPlugins[i]);
             TUid listed = pluginArray[j]->ImplementationUid();
             TPtrC8 listedopaque = pluginArray[j]->OpaqueData();
-            if ( loaded == listed && ( (listedopaque.CompareF( KAlfDoNotUnloadPlugin )) != 0 ) )
+            if ( loaded == listed && ( (listedopaque.CompareF( KAlfDoNotUnloadPlugin )) != 0 ) && windowMgr)
                 {
-                ((CAlfStreamerServer*)(Server()))->WindowMgr()->DestroyPlugin(TUid::Uid(iLoadedPlugins[i]));
+                windowMgr->DestroyPlugin(TUid::Uid(iLoadedPlugins[i]));
                 }
             }
         }