Browse Source

qcacmn: Fix peer ref count issue in p2p_mgmt_tx

In p2p_mgmt_tx ref count of peer is increased and then frame is
passed to wlan_mgmt_txrx_mgmt_frame_tx which again increase the peer
ref count. But the ref count is decreased only once when frame tx
complete is received. Thus peer is not deleted while vdev destroy
and as peer contain the ref count of vdev, vdev is also not
deleted.

To fix this Release peer ref count in p2p_mgmt_tx after
wlan_mgmt_txrx_mgmt_frame_tx.

Change-Id: I8e42b22559f3baf43fefd6183a079f9629efae3c
CRs-Fixed: 2028550
Abhishek Singh 8 years ago
parent
commit
8c2ce41254
1 changed files with 4 additions and 2 deletions
  1. 4 2
      umac/p2p/core/src/wlan_p2p_off_chan_tx.c

+ 4 - 2
umac/p2p/core/src/wlan_p2p_off_chan_tx.c

@@ -784,11 +784,11 @@ static QDF_STATUS p2p_mgmt_tx(struct tx_action_context *tx_ctx,
 
 
 	wh = (struct wlan_frame_hdr *)frame;
 	wh = (struct wlan_frame_hdr *)frame;
 	mac_addr = wh->i_addr1;
 	mac_addr = wh->i_addr1;
-	peer = wlan_objmgr_get_peer(psoc, mac_addr, WLAN_MGMT_NB_ID);
+	peer = wlan_objmgr_get_peer(psoc, mac_addr, WLAN_P2P_ID);
 	if (!peer) {
 	if (!peer) {
 		mac_addr = wh->i_addr2;
 		mac_addr = wh->i_addr2;
 		peer = wlan_objmgr_get_peer(psoc, mac_addr,
 		peer = wlan_objmgr_get_peer(psoc, mac_addr,
-					WLAN_MGMT_NB_ID);
+					WLAN_P2P_ID);
 	}
 	}
 
 
 	if (!peer) {
 	if (!peer) {
@@ -813,6 +813,8 @@ static QDF_STATUS p2p_mgmt_tx(struct tx_action_context *tx_ctx,
 			tx_comp_cb, tx_ota_comp_cb,
 			tx_comp_cb, tx_ota_comp_cb,
 			WLAN_UMAC_COMP_P2P, &mgmt_param);
 			WLAN_UMAC_COMP_P2P, &mgmt_param);
 
 
+	wlan_objmgr_peer_release_ref(peer, WLAN_P2P_ID);
+
 	return status;
 	return status;
 }
 }