summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbhishek Singh <absingh@qti.qualcomm.com>2013-12-12 18:03:29 +0530
committerAkash Patel <c_akashp@qca.qualcomm.com>2014-03-27 09:22:12 -0700
commit62efb794cd20046aa5bda2b7d8acdfd6f9478c77 (patch)
treef55d77b39d16cb52c8d7ca8e1adfd5a7432a3ad0
parent7a1749ee1326b535004ae0f1e4e9e7b24dde46f5 (diff)
wlan: Crash due to wrong roaming scan state.
In limSuspendLink, lim is calling init scan and even if init scan fails it continue ahead. Now in limResumeLink there is no check to verify that init scan failed and thus avoid sending finish scan. Added check in limResumeLink if scan init was successful or not. Send finish scan only when init scan was successful. Change-Id: I966f1862a52a34b96a38e016802cabf36c7e7360 CRs-Fixed: 588494
-rw-r--r--CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c19
-rw-r--r--CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c7
2 files changed, 24 insertions, 2 deletions
diff --git a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
index f4d5f6a589a9..e49adac63c23 100644
--- a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
@@ -318,7 +318,24 @@ limResumeLink(tpAniSirGlobal pMac, SUSPEND_RESUME_LINK_CALLBACK callback, tANI_U
pMac->lim.gpLimResumeCallback = callback;
pMac->lim.gpLimResumeData = data;
- limSendHalFinishScanReq(pMac, eLIM_HAL_RESUME_LINK_WAIT_STATE );
+
+ /* eLIM_HAL_IDLE_SCAN_STATE state indicate limSendHalInitScanReq failed.
+ * In case limSendHalInitScanReq is success, Scanstate would be
+ * eLIM_HAL_SUSPEND_LINK_STATE
+ */
+ if( eLIM_HAL_IDLE_SCAN_STATE != pMac->lim.gLimHalScanState )
+ {
+ limSendHalFinishScanReq(pMac, eLIM_HAL_RESUME_LINK_WAIT_STATE );
+ }
+ else
+ {
+ limLog(pMac, LOGW, FL("Init Scan failed, we will not call finish scan."
+ " calling the callback with failure status"));
+ pMac->lim.gpLimResumeCallback( pMac, eSIR_FAILURE, pMac->lim.gpLimResumeData);
+ pMac->lim.gpLimResumeCallback = NULL;
+ pMac->lim.gpLimResumeData = NULL;
+ pMac->lim.gLimSystemInScanLearnMode = 0;
+ }
if(limIsInMCC(pMac))
{
diff --git a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c
index 820c23a5bd7c..6b3e3f26e175 100644
--- a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c
@@ -3537,10 +3537,15 @@ void limProcessInitScanRsp(tpAniSirGlobal pMac, void *body)
case eLIM_HAL_SUSPEND_LINK_WAIT_STATE:
if( pMac->lim.gpLimSuspendCallback )
{
- if( status == eHAL_STATUS_SUCCESS )
+ if( eHAL_STATUS_SUCCESS == status )
+ {
pMac->lim.gLimHalScanState = eLIM_HAL_SUSPEND_LINK_STATE;
+ }
else
+ {
pMac->lim.gLimHalScanState = eLIM_HAL_IDLE_SCAN_STATE;
+ pMac->lim.gLimSystemInScanLearnMode = 0;
+ }
pMac->lim.gpLimSuspendCallback( pMac, status, pMac->lim.gpLimSuspendData );
pMac->lim.gpLimSuspendCallback = NULL;