wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/src/WlanLogicalChannel.cpp
changeset 13 ab7247ff6ef9
parent 0 c40eb8fe8501
child 10 0abc8c98be24
--- a/wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/src/WlanLogicalChannel.cpp	Tue Feb 02 02:03:13 2010 +0200
+++ b/wlan_bearer/wlanldd/wlan_symbian/wlanldd_symbian/src/WlanLogicalChannel.cpp	Fri Mar 19 10:03:22 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of the License "Eclipse Public License v1.0"
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 56 %
+* %version: 57 %
 */
 
 #include "WlLddWlanLddConfig.h"
@@ -196,6 +196,12 @@
     if ( iEthernetFrameMemMngr )
         {
         TraceDump(INIT_LEVEL, ("WLANLDD: deallocate ethernet frame memory pool"));
+        
+        // normally the user side client will do this, but just to be on 
+        // the safe side, make sure it really is done before proceeding with
+        // frame memory mgr destruction
+        OnReleaseEthernetFrameBuffers();
+        
         TraceDump(MEMORY, (("WLANLDD: delete DEthernetFrameMemMngr: 0x%08x"), 
         reinterpret_cast<TUint32>(iEthernetFrameMemMngr)));        
     
@@ -844,7 +850,8 @@
 //
 void DWlanLogicalChannel::UserDataReEnabled()
     {
-    if ( !( iFlags & KTxTriggerArmed ) )
+    if ( ProtocolStackSideClientReady() &&
+         !( iFlags & KTxTriggerArmed ) )
         {
         iFlags |= KTxTriggerArmed;
         iTxTriggerDfc.Enque();
@@ -935,7 +942,8 @@
     // someone else than the Protocol Stack Side Client unblocks the WHA Tx
     // pipeline and
     // b) to avoid the Tx pipe from getting stuck even temporarily
-    if ( !( iFlags & KTxTriggerArmed ) )
+    if ( ProtocolStackSideClientReady() &&
+         !( iFlags & KTxTriggerArmed ) )
         {
         iFlags |= KTxTriggerArmed;
         iTxTriggerDfc.Enque(); // we do this via a DFC
@@ -957,7 +965,8 @@
     // makes a WHA Txqueue - for which there are packets pending in our Tx 
     // queues - non-full
     // b) to avoid the Tx pipe from getting stuck even temporarily
-    if ( !( iFlags & KTxTriggerArmed ) )
+    if ( ProtocolStackSideClientReady() &&
+         !( iFlags & KTxTriggerArmed ) )
         {
         iFlags |= KTxTriggerArmed;
         iTxTriggerDfc.Enque(); // we do this via a DFC
@@ -1001,7 +1010,7 @@
         TBool morePackets ( EFalse );
         iTxActive = ETrue;
         
-        while ( iUmac.TxPermitted( txQueueState ) )
+        while ( iUmac.TxPermitted( txQueueState ) && iEthernetFrameMemMngr )
             {
             TDataBuffer* metaHeader = 
                 iEthernetFrameMemMngr->GetTxFrame( txQueueState, morePackets );
@@ -1603,7 +1612,7 @@
     {
     if ( iEthernetFrameMemMngr )
         {
-        iEthernetFrameMemMngr->OnReleaseMemory();    
+        iEthernetFrameMemMngr->OnReleaseMemory( *iClient );    
         }
     }