/*-------------------------------------------------------------------------- \brief peDeleteSession() - deletes the PE session given the session ID. \param pMac - pointer to global adapter context \param sessionId -session ID of the session which needs to be deleted. \sa --------------------------------------------------------------------------*/ void peDeleteSession(tpAniSirGlobal pMac, tpPESession psessionEntry) { tANI_U16 i = 0; tANI_U16 n; TX_TIMER *timer_ptr; limLog(pMac, LOGW, FL("Trying to delete a session %d.\n "), psessionEntry->peSessionId); for (n = 0; n < pMac->lim.maxStation; n++) { timer_ptr = &pMac->lim.limTimers.gpLimCnfWaitTimer[n]; if(psessionEntry->peSessionId == timer_ptr->sessionId) { if(VOS_TRUE == tx_timer_running(timer_ptr)) { tx_timer_deactivate(timer_ptr); } } } if(psessionEntry->pLimStartBssReq != NULL) { palFreeMemory( pMac->hHdd, psessionEntry->pLimStartBssReq ); psessionEntry->pLimStartBssReq = NULL; } if(psessionEntry->pLimJoinReq != NULL) { palFreeMemory( pMac->hHdd, psessionEntry->pLimJoinReq ); psessionEntry->pLimJoinReq = NULL; } if(psessionEntry->pLimReAssocReq != NULL) { palFreeMemory( pMac->hHdd, psessionEntry->pLimReAssocReq ); psessionEntry->pLimReAssocReq = NULL; } if(psessionEntry->pLimMlmJoinReq != NULL) { palFreeMemory( pMac->hHdd, psessionEntry->pLimMlmJoinReq ); psessionEntry->pLimMlmJoinReq = NULL; } if(psessionEntry->dph.dphHashTable.pHashTable != NULL) { palFreeMemory(pMac->hHdd, psessionEntry->dph.dphHashTable.pHashTable); psessionEntry->dph.dphHashTable.pHashTable = NULL; } if(psessionEntry->dph.dphHashTable.pDphNodeArray != NULL) { palFreeMemory(pMac->hHdd, psessionEntry->dph.dphHashTable.pDphNodeArray); psessionEntry->dph.dphHashTable.pDphNodeArray = NULL; } if(psessionEntry->beacon != NULL) { palFreeMemory( pMac->hHdd, psessionEntry->beacon); psessionEntry->beacon = NULL; } if(psessionEntry->assocReq != NULL) { palFreeMemory( pMac->hHdd, psessionEntry->assocReq); psessionEntry->assocReq = NULL; } if(psessionEntry->assocRsp != NULL) { palFreeMemory( pMac->hHdd, psessionEntry->assocRsp); psessionEntry->assocRsp = NULL; } if(psessionEntry->parsedAssocReq != NULL) { // Cleanup the individual allocation first for (i=0; i < psessionEntry->dph.dphHashTable.size; i++) { if ( psessionEntry->parsedAssocReq[i] != NULL ) { if( ((tpSirAssocReq)(psessionEntry->parsedAssocReq[i]))->assocReqFrame ) { palFreeMemory(pMac->hHdd, ((tpSirAssocReq)(psessionEntry->parsedAssocReq[i]))->assocReqFrame); ((tpSirAssocReq)(psessionEntry->parsedAssocReq[i]))->assocReqFrame = NULL; ((tpSirAssocReq)(psessionEntry->parsedAssocReq[i]))->assocReqFrameLength = 0; } palFreeMemory(pMac->hHdd, (void *)psessionEntry->parsedAssocReq[i]); psessionEntry->parsedAssocReq[i] = NULL; } } // Cleanup the whole block palFreeMemory(pMac->hHdd, (void *)psessionEntry->parsedAssocReq); psessionEntry->parsedAssocReq = NULL; } #ifdef FEATURE_WLAN_CCX limCleanupCcxCtxt(pMac, psessionEntry); #endif psessionEntry->valid = FALSE; return; }
/*-------------------------------------------------------------------------- \brief peDeleteSession() - deletes the PE session given the session ID. \param pMac - pointer to global adapter context \param sessionId -session ID of the session which needs to be deleted. \sa --------------------------------------------------------------------------*/ void peDeleteSession(tpAniSirGlobal pMac, tpPESession psessionEntry) { tANI_U16 i = 0; tANI_U16 n; TX_TIMER *timer_ptr; eHalStatus lock_status = eHAL_STATUS_SUCCESS; limLog(pMac, LOGW, FL("Trying to delete a session %d Opmode %d BssIdx %d" " BSSID: " MAC_ADDRESS_STR), psessionEntry->peSessionId, psessionEntry->operMode, psessionEntry->bssIdx, MAC_ADDR_ARRAY(psessionEntry->bssId)); for (n = 0; n < pMac->lim.maxStation; n++) { timer_ptr = &pMac->lim.limTimers.gpLimCnfWaitTimer[n]; if(psessionEntry->peSessionId == timer_ptr->sessionId) { if(VOS_TRUE == tx_timer_running(timer_ptr)) { tx_timer_deactivate(timer_ptr); } } } #ifdef WLAN_FEATURE_11AC /* Unblock the MuBF for other session if the MuBf session is deleted */ if(psessionEntry->txMuBformee) { pMac->isMuBfsessionexist = FALSE; } #endif if (psessionEntry->pLimStartBssReq != NULL) { vos_mem_free( psessionEntry->pLimStartBssReq ); psessionEntry->pLimStartBssReq = NULL; } if(psessionEntry->pLimJoinReq != NULL) { vos_mem_free( psessionEntry->pLimJoinReq ); psessionEntry->pLimJoinReq = NULL; } if(psessionEntry->pLimReAssocReq != NULL) { vos_mem_free( psessionEntry->pLimReAssocReq ); psessionEntry->pLimReAssocReq = NULL; } if(psessionEntry->pLimMlmJoinReq != NULL) { vos_mem_free( psessionEntry->pLimMlmJoinReq ); psessionEntry->pLimMlmJoinReq = NULL; } lock_status = pe_AcquireGlobalLock(&pMac->lim); if (eHAL_STATUS_SUCCESS == lock_status) { if (psessionEntry->dph.dphHashTable.pHashTable != NULL) { vos_mem_vfree(psessionEntry->dph.dphHashTable.pHashTable); psessionEntry->dph.dphHashTable.pHashTable = NULL; } } pe_ReleaseGlobalLock(&pMac->lim); if(psessionEntry->dph.dphHashTable.pDphNodeArray != NULL) { vos_mem_vfree(psessionEntry->dph.dphHashTable.pDphNodeArray); psessionEntry->dph.dphHashTable.pDphNodeArray = NULL; } if(psessionEntry->gpLimPeerIdxpool != NULL) { vos_mem_vfree(psessionEntry->gpLimPeerIdxpool); psessionEntry->gpLimPeerIdxpool = NULL; } if(psessionEntry->beacon != NULL) { vos_mem_free( psessionEntry->beacon); psessionEntry->beacon = NULL; } if(psessionEntry->assocReq != NULL) { vos_mem_free( psessionEntry->assocReq); psessionEntry->assocReq = NULL; } if(psessionEntry->assocRsp != NULL) { vos_mem_free( psessionEntry->assocRsp); psessionEntry->assocRsp = NULL; } if(psessionEntry->parsedAssocReq != NULL) { // Cleanup the individual allocation first for (i=0; i < psessionEntry->dph.dphHashTable.size; i++) { if ( psessionEntry->parsedAssocReq[i] != NULL ) { if( ((tpSirAssocReq)(psessionEntry->parsedAssocReq[i]))->assocReqFrame ) { vos_mem_free(((tpSirAssocReq) (psessionEntry->parsedAssocReq[i]))->assocReqFrame); ((tpSirAssocReq)(psessionEntry->parsedAssocReq[i]))->assocReqFrame = NULL; ((tpSirAssocReq)(psessionEntry->parsedAssocReq[i]))->assocReqFrameLength = 0; } vos_mem_free(psessionEntry->parsedAssocReq[i]); psessionEntry->parsedAssocReq[i] = NULL; } } // Cleanup the whole block vos_mem_free(psessionEntry->parsedAssocReq); psessionEntry->parsedAssocReq = NULL; } if (NULL != psessionEntry->limAssocResponseData) { vos_mem_free( psessionEntry->limAssocResponseData); psessionEntry->limAssocResponseData = NULL; } #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_ESE) || defined(FEATURE_WLAN_LFR) if (NULL != psessionEntry->pLimMlmReassocRetryReq) { vos_mem_free( psessionEntry->pLimMlmReassocRetryReq); psessionEntry->pLimMlmReassocRetryReq = NULL; } #endif if (NULL != psessionEntry->pLimMlmReassocReq) { vos_mem_free( psessionEntry->pLimMlmReassocReq); psessionEntry->pLimMlmReassocReq = NULL; } #if defined(FEATURE_WLAN_ESE) && !defined(FEATURE_WLAN_ESE_UPLOAD) limCleanupEseCtxt(pMac, psessionEntry); #endif psessionEntry->valid = FALSE; return; }