wlan:Handle assertion raised during LFR roaming.

When roaming get fail, csrRoamRoamingStateDisassocRspProcessor will
post SME_QOS_CSR_HANDOFF_ASSOC_REQ to SME QoS Module which will
raised an assert into the sme_QosProcessHandoffAssocReqEv due to Qos
Current state mismatch. So Ideally SME QOS current state should be set
to init state before posting SME_QOS_CSR_HANDOFF_ASSOC_REQ msg.
Hence csr is setting HandoffRequested to False for that session
which will assist in resetting qos current state to init state during
handling of SME_QOS_CSR_DISCONNECT_IND (sme_QosProcessDisconnectEv).

Change-Id: Ie8be41317422682e607714d32499bfa6c0ab15ec
CRs-Fixed: 590508
diff --git a/CORE/SME/inc/sme_QosApi.h b/CORE/SME/inc/sme_QosApi.h
index c5bf8ad..b858253 100644
--- a/CORE/SME/inc/sme_QosApi.h
+++ b/CORE/SME/inc/sme_QosApi.h
@@ -381,4 +381,17 @@
     sme_QosWmmTspecInfo * pQoSInfo,
     v_U8_t sessionId);
 
+
+/*--------------------------------------------------------------------------
+  \brief sme_QosUpdateHandOff() - Function which can be called to update
+   Hand-off state of SME QoS Session
+  \param sessionId - session id
+  \param updateHandOff - value True/False to update the handoff flag
+
+  \sa
+
+-------------------------------------------------------------------------*/
+void sme_QosUpdateHandOff(v_U8_t sessionId,
+     v_BOOL_t updateHandOff);
+
 #endif //#if !defined( __SME_QOSAPI_H )
diff --git a/CORE/SME/src/QoS/sme_Qos.c b/CORE/SME/src/QoS/sme_Qos.c
index 3761a66..10bd442 100644
--- a/CORE/SME/src/QoS/sme_Qos.c
+++ b/CORE/SME/src/QoS/sme_Qos.c
@@ -7167,6 +7167,30 @@
    }
    return status;
 }
+
+/*--------------------------------------------------------------------------
+  \brief sme_QosUpdateHandOff() - Function which can be called to update
+   Hand-off state of SME QoS Session
+  \param sessionId - session id
+  \param updateHandOff - value True/False to update the handoff flag
+
+  \sa
+
+-------------------------------------------------------------------------*/
+void sme_QosUpdateHandOff(v_U8_t sessionId,
+                          v_BOOL_t updateHandOff)
+{
+   sme_QosSessionInfo *pSession;
+   pSession = &sme_QosCb.sessionInfo[sessionId];
+   VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO_MED,
+             "%s: %d: handoffRequested %d updateHandOff %d",
+             __func__, __LINE__,pSession->handoffRequested,
+             updateHandOff);
+
+   pSession->handoffRequested = updateHandOff;
+
+}
+
 /*--------------------------------------------------------------------------
   \brief sme_QosIsUapsdActive() - Function which can be called to determine
   if any sessions require PMC to be in U-APSD mode.
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 02b7baa..1249eb8 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -5752,6 +5752,7 @@
                         }
                     smsLog(pMac, LOG1, FL("  roam(reason %d) failed"), pCommand->u.roamCmd.roamReason);
 #ifndef WLAN_MDM_CODE_REDUCTION_OPT
+                    sme_QosUpdateHandOff((tANI_U8)sessionId, VOS_FALSE);
                     sme_QosCsrEventInd(pMac, (tANI_U8)sessionId, SME_QOS_CSR_DISCONNECT_IND, NULL);
 #endif
                     csrRoamCompletion(pMac, sessionId, NULL, pCommand, eCSR_ROAM_RESULT_FAILURE, eANI_BOOLEAN_FALSE);