From f3a3e912af94e8a37560fbee898b645378977e4d Mon Sep 17 00:00:00 2001 From: Abhishek Singh Date: Tue, 4 Apr 2017 15:26:54 +0530 Subject: [PATCH] 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 --- core/src/wlan_p2p_off_chan_tx.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/src/wlan_p2p_off_chan_tx.c b/core/src/wlan_p2p_off_chan_tx.c index f243fc60f32d..836ace012a72 100644 --- a/core/src/wlan_p2p_off_chan_tx.c +++ b/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; 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) { mac_addr = wh->i_addr2; peer = wlan_objmgr_get_peer(psoc, mac_addr, - WLAN_MGMT_NB_ID); + WLAN_P2P_ID); } 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, WLAN_UMAC_COMP_P2P, &mgmt_param); + wlan_objmgr_peer_release_ref(peer, WLAN_P2P_ID); + return status; }