|
@@ -396,6 +396,18 @@ static QDF_STATUS sme_ese_send_beacon_req_scan_results(
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
+static inline
|
|
|
+void sme_reset_ese_bcn_req_in_progress(tpRrmSMEContext sme_rrm_ctx)
|
|
|
+{
|
|
|
+ if (sme_rrm_ctx)
|
|
|
+ sme_rrm_ctx->eseBcnReqInProgress = false;
|
|
|
+}
|
|
|
+
|
|
|
+#else
|
|
|
+
|
|
|
+static inline
|
|
|
+void sme_reset_ese_bcn_req_in_progress(tpRrmSMEContext sme_rrm_ctx)
|
|
|
+{}
|
|
|
#endif /* FEATURE_WLAN_ESE */
|
|
|
|
|
|
/**
|
|
@@ -639,6 +651,7 @@ static QDF_STATUS sme_rrm_scan_request_callback(mac_handle_t mac_handle,
|
|
|
struct mac_context *mac = MAC_CONTEXT(mac_handle);
|
|
|
tpRrmSMEContext pSmeRrmContext = &mac->rrm.rrmSmeContext;
|
|
|
uint32_t time_tick;
|
|
|
+ QDF_STATUS qdf_status;
|
|
|
|
|
|
/* if any more channels are pending, start a timer of a random value
|
|
|
* within randomization interval.
|
|
@@ -661,7 +674,13 @@ static QDF_STATUS sme_rrm_scan_request_callback(mac_handle_t mac_handle,
|
|
|
time_tick % (pSmeRrmContext->randnIntvl - 10 + 1) + 10;
|
|
|
|
|
|
sme_debug("Set timer for interval %d ", interval);
|
|
|
- qdf_mc_timer_start(&pSmeRrmContext->IterMeasTimer, interval);
|
|
|
+ qdf_status = qdf_mc_timer_start(&pSmeRrmContext->IterMeasTimer,
|
|
|
+ interval);
|
|
|
+ if (QDF_IS_STATUS_ERROR(qdf_status)) {
|
|
|
+ qdf_mem_free(pSmeRrmContext->channelList.ChannelList);
|
|
|
+ pSmeRrmContext->channelList.ChannelList = NULL;
|
|
|
+ sme_reset_ese_bcn_req_in_progress(pSmeRrmContext);
|
|
|
+ }
|
|
|
|
|
|
} else {
|
|
|
/* Done with the measurement. Clean up all context and send a
|
|
@@ -673,9 +692,8 @@ static QDF_STATUS sme_rrm_scan_request_callback(mac_handle_t mac_handle,
|
|
|
->currentIndex],
|
|
|
true);
|
|
|
qdf_mem_free(pSmeRrmContext->channelList.ChannelList);
|
|
|
-#ifdef FEATURE_WLAN_ESE
|
|
|
- pSmeRrmContext->eseBcnReqInProgress = false;
|
|
|
-#endif
|
|
|
+ pSmeRrmContext->channelList.ChannelList = NULL;
|
|
|
+ sme_reset_ese_bcn_req_in_progress(pSmeRrmContext);
|
|
|
}
|
|
|
|
|
|
return QDF_STATUS_SUCCESS;
|
|
@@ -943,6 +961,10 @@ QDF_STATUS sme_rrm_process_beacon_report_req_ind(struct mac_context *mac,
|
|
|
&& (pBeaconReq->channelList.numChannels == 0))) {
|
|
|
/* Add all the channel in the regulatory domain. */
|
|
|
len = mac->mlme_cfg->reg.valid_channel_list_num;
|
|
|
+ if (pSmeRrmContext->channelList.ChannelList) {
|
|
|
+ qdf_mem_free(pSmeRrmContext->channelList.ChannelList);
|
|
|
+ pSmeRrmContext->channelList.ChannelList = NULL;
|
|
|
+ }
|
|
|
pSmeRrmContext->channelList.ChannelList = qdf_mem_malloc(len);
|
|
|
if (!pSmeRrmContext->channelList.ChannelList)
|
|
|
return QDF_STATUS_E_NOMEM;
|
|
@@ -963,6 +985,10 @@ QDF_STATUS sme_rrm_process_beacon_report_req_ind(struct mac_context *mac,
|
|
|
|
|
|
len += pBeaconReq->channelList.numChannels;
|
|
|
|
|
|
+ if (pSmeRrmContext->channelList.ChannelList) {
|
|
|
+ qdf_mem_free(pSmeRrmContext->channelList.ChannelList);
|
|
|
+ pSmeRrmContext->channelList.ChannelList = NULL;
|
|
|
+ }
|
|
|
pSmeRrmContext->channelList.ChannelList = qdf_mem_malloc(len);
|
|
|
if (!pSmeRrmContext->channelList.ChannelList)
|
|
|
return QDF_STATUS_E_NOMEM;
|
|
@@ -1502,6 +1528,11 @@ QDF_STATUS rrm_close(struct mac_context *mac)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if (pSmeRrmContext->channelList.ChannelList) {
|
|
|
+ qdf_mem_free(pSmeRrmContext->channelList.ChannelList);
|
|
|
+ pSmeRrmContext->channelList.ChannelList = NULL;
|
|
|
+ }
|
|
|
+
|
|
|
qdf_status = qdf_mc_timer_destroy(&pSmeRrmContext->IterMeasTimer);
|
|
|
if (!QDF_IS_STATUS_SUCCESS(qdf_status)) {
|
|
|
|