diff options
| author | Abhishek Singh <absingh@qti.qualcomm.com> | 2013-12-12 18:03:29 +0530 |
|---|---|---|
| committer | Akash Patel <c_akashp@qca.qualcomm.com> | 2014-03-27 09:22:12 -0700 |
| commit | 62efb794cd20046aa5bda2b7d8acdfd6f9478c77 (patch) | |
| tree | f55d77b39d16cb52c8d7ca8e1adfd5a7432a3ad0 | |
| parent | 7a1749ee1326b535004ae0f1e4e9e7b24dde46f5 (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.c | 19 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c | 7 |
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; |
