summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDustin Brown <dustinb@codeaurora.org>2016-12-02 16:01:08 -0800
committerqcabuildsw <qcabuildsw@localhost>2016-12-05 17:03:10 -0800
commitebd56ccddf7aaae3c637a40fdbba8c1f23ab5feb (patch)
treecd540f21d7499d833fa3b2b3a7214bb4dfa64fae
parent25ec2c0096abcd53f6ced01c1cbe51b92698344f (diff)
qcacld-3.0: Fix out-of-order completion variable usage
hdd_wlan_get_ibss_peer_info() and hdd_wlan_get_ibss_peer_info_all() initialize their completion variables after scheduling work, leading to a race condition that can cause the completion variable to be set before it is initialized. Reorder the operations so work is scheduled after initializing the completion variables. Change-Id: Ic773574f3620438b473cd5bcebee78ad87a37942 CRs-Fixed: 1074692
-rw-r--r--core/hdd/src/wlan_hdd_wext.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/core/hdd/src/wlan_hdd_wext.c b/core/hdd/src/wlan_hdd_wext.c
index 591ff4032f75..56b7296c072c 100644
--- a/core/hdd/src/wlan_hdd_wext.c
+++ b/core/hdd/src/wlan_hdd_wext.c
@@ -852,11 +852,10 @@ static QDF_STATUS hdd_wlan_get_ibss_peer_info(hdd_adapter_t *pAdapter,
hdd_station_ctx_t *pStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
tSirPeerInfoRspParams *pPeerInfo = &pStaCtx->ibss_peer_info;
- status =
- sme_request_ibss_peer_info(hHal, pAdapter, hdd_get_ibss_peer_info_cb,
- false, staIdx);
-
INIT_COMPLETION(pAdapter->ibss_peer_info_comp);
+ status = sme_request_ibss_peer_info(hHal, pAdapter,
+ hdd_get_ibss_peer_info_cb,
+ false, staIdx);
if (QDF_STATUS_SUCCESS == status) {
unsigned long rc;
@@ -902,10 +901,10 @@ static QDF_STATUS hdd_wlan_get_ibss_peer_info_all(hdd_adapter_t *pAdapter)
tSirPeerInfoRspParams *pPeerInfo = &pStaCtx->ibss_peer_info;
int i;
- status =
- sme_request_ibss_peer_info(hHal, pAdapter, hdd_get_ibss_peer_info_cb,
- true, 0xFF);
INIT_COMPLETION(pAdapter->ibss_peer_info_comp);
+ status = sme_request_ibss_peer_info(hHal, pAdapter,
+ hdd_get_ibss_peer_info_cb,
+ true, 0xFF);
if (QDF_STATUS_SUCCESS == status) {
unsigned long rc;