wlan: Avoid race condition in locking of tx queues per staId.

In function hdd_softap_tx_fetch_packet_cbk we take a lock on
wmm tx queues per sta id, but while we are in that lock, it is
possible that the lock of these queues are re initialized in
function hdd_softap_deinit_tx_rx_sta. Now to avoid this race
condition we take another spin lock on pAdapter->staInfo_lock
which is used in later function too. So this way the race will
be avoided and we can successfully unlock the tx queues.

Change-Id: I19b4ccb6489edb226bdcfb1acf4e50ba2302eac7
CRs-Fixed: 693908
diff --git a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
index ec68f98..8b31aa0 100644
--- a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
+++ b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
@@ -1144,18 +1144,21 @@
    /* Only fetch this station and this AC. Return VOS_STATUS_E_EMPTY if nothing there. Do not get next AC
       as the other branch does.
    */
+   spin_lock_bh( &pAdapter->staInfo_lock );
    spin_lock_bh(&pAdapter->aStaInfo[STAId].wmm_tx_queue[ac].lock);
    hdd_list_size(&pAdapter->aStaInfo[STAId].wmm_tx_queue[ac], &size);
 
    if (0 == size)
    {
       spin_unlock_bh(&pAdapter->aStaInfo[STAId].wmm_tx_queue[ac].lock);
+      spin_unlock_bh( &pAdapter->staInfo_lock );
       vos_pkt_return_packet(pVosPacket);
       return VOS_STATUS_E_EMPTY;
    }
 
    status = hdd_list_remove_front( &pAdapter->aStaInfo[STAId].wmm_tx_queue[ac], &anchor );
    spin_unlock_bh(&pAdapter->aStaInfo[STAId].wmm_tx_queue[ac].lock);
+   spin_unlock_bh( &pAdapter->staInfo_lock );
 
    VOS_TRACE( VOS_MODULE_ID_HDD_SAP_DATA, VOS_TRACE_LEVEL_INFO,
                        "%s: AC %d has packets pending", __func__, ac);