diff --git a/umac/tdls/core/src/wlan_tdls_cmds_process.c b/umac/tdls/core/src/wlan_tdls_cmds_process.c index ded673c0b5fd..8c9f985a5e72 100644 --- a/umac/tdls/core/src/wlan_tdls_cmds_process.c +++ b/umac/tdls/core/src/wlan_tdls_cmds_process.c @@ -97,7 +97,7 @@ static char *tdls_get_ser_cmd_str(enum wlan_serialization_cmd_type type) } } -static void +void tdls_release_serialization_command(struct wlan_objmgr_vdev *vdev, enum wlan_serialization_cmd_type type) { diff --git a/umac/tdls/core/src/wlan_tdls_cmds_process.h b/umac/tdls/core/src/wlan_tdls_cmds_process.h index da14cfa6ab9f..bebf1b099f54 100644 --- a/umac/tdls/core/src/wlan_tdls_cmds_process.h +++ b/umac/tdls/core/src/wlan_tdls_cmds_process.h @@ -291,6 +291,19 @@ QDF_STATUS tdls_process_add_peer_rsp(struct tdls_add_sta_rsp *rsp); void tdls_reset_nss(struct tdls_soc_priv_obj *tdls_soc, uint8_t action_code); +/** + * tdls_release_serialization_command() - TDLS wrapper to + * relases serialization command. + * @vdev: Object manager vdev + * @type: command to release. + * + * Return: None + */ + +void +tdls_release_serialization_command(struct wlan_objmgr_vdev *vdev, + enum wlan_serialization_cmd_type type); + /** * tdls_set_cap() - set TDLS capability type * @tdls_vdev: tdls vdev object diff --git a/umac/tdls/core/src/wlan_tdls_mgmt.c b/umac/tdls/core/src/wlan_tdls_mgmt.c index e60d2824c655..8b051ac36871 100644 --- a/umac/tdls/core/src/wlan_tdls_mgmt.c +++ b/umac/tdls/core/src/wlan_tdls_mgmt.c @@ -206,7 +206,6 @@ tdls_internal_send_mgmt_tx_done(struct tdls_action_frame_request *req, indication.status = status; indication.vdev = req->vdev; - tdls_soc_obj = wlan_vdev_get_tdls_soc_obj(req->vdev); if (tdls_soc_obj && tdls_soc_obj->tdls_event_cb) tdls_soc_obj->tdls_event_cb(tdls_soc_obj->tdls_evt_cb_data, @@ -272,8 +271,8 @@ static QDF_STATUS tdls_activate_send_mgmt_request( peer = wlan_vdev_get_bsspeer(action_req->vdev); - if (QDF_STATUS_SUCCESS != wlan_objmgr_peer_try_get_ref(peer, - WLAN_TDLS_SB_ID)) { + status = wlan_objmgr_peer_try_get_ref(peer, WLAN_TDLS_SB_ID); + if (QDF_IS_STATUS_ERROR(status)) { qdf_mem_free(tdls_mgmt_req); goto release_mgmt_ref; } @@ -315,6 +314,11 @@ release_mgmt_ref: /*update tdls nss infornation based on action code */ tdls_reset_nss(tdls_soc_obj, action_req->chk_frame->action_code); + if (QDF_IS_STATUS_ERROR(status)) { + tdls_internal_send_mgmt_tx_done(action_req, status); + tdls_release_serialization_command(action_req->vdev, + WLAN_SER_CMD_TDLS_SEND_MGMT); + } return status; }