diff options
| -rw-r--r-- | core/hdd/src/wlan_hdd_main.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 963598cb78c4..42d88102bb99 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -3706,22 +3706,26 @@ QDF_STATUS hdd_stop_adapter(hdd_context_t *hdd_ctx, hdd_adapter_t *adapter, hdd_ctx->hHal, adapter->sessionId, eCSR_DISCONNECT_REASON_IBSS_LEAVE); + else if (QDF_STA_MODE == adapter->device_mode) + qdf_ret_status = + wlan_hdd_try_disconnect(adapter); else qdf_ret_status = sme_roam_disconnect( hdd_ctx->hHal, adapter->sessionId, eCSR_DISCONNECT_REASON_UNSPECIFIED); /* success implies disconnect command got queued up successfully */ - if (qdf_ret_status == QDF_STATUS_SUCCESS) { + if (qdf_ret_status == QDF_STATUS_SUCCESS && + QDF_STA_MODE != adapter->device_mode) { rc = wait_for_completion_timeout( &adapter->disconnect_comp_var, msecs_to_jiffies (WLAN_WAIT_TIME_DISCONNECT)); if (!rc) hdd_warn("wait on disconnect_comp_var failed"); - } else { - hdd_warn("failed to post disconnect event to SME"); } + if (qdf_ret_status != QDF_STATUS_SUCCESS) + hdd_warn("failed to post disconnect"); memset(&wrqu, '\0', sizeof(wrqu)); wrqu.ap_addr.sa_family = ARPHRD_ETHER; memset(wrqu.ap_addr.sa_data, '\0', ETH_ALEN); |
