diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c index caaf830b3d9e..8884b38d5481 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c +++ b/umac/cmn_services/obj_mgr/src/wlan_objmgr_pdev_obj.c @@ -207,7 +207,9 @@ static QDF_STATUS wlan_objmgr_pdev_obj_destroy(struct wlan_objmgr_pdev *pdev) for (id = 0; id < WLAN_UMAC_MAX_COMPONENTS; id++) { handler = g_umac_glb_obj->pdev_destroy_handler[id]; arg = g_umac_glb_obj->pdev_destroy_handler_arg[id]; - if (handler != NULL) + if (handler && + (pdev->obj_status[id] == QDF_STATUS_SUCCESS || + pdev->obj_status[id] == QDF_STATUS_COMP_ASYNC)) pdev->obj_status[id] = handler(pdev, arg); else pdev->obj_status[id] = QDF_STATUS_COMP_DISABLED; diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c index ad22c8f8107a..49d8daebe3d3 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c +++ b/umac/cmn_services/obj_mgr/src/wlan_objmgr_peer_obj.c @@ -303,7 +303,9 @@ static QDF_STATUS wlan_objmgr_peer_obj_destroy(struct wlan_objmgr_peer *peer) for (id = 0; id < WLAN_UMAC_MAX_COMPONENTS; id++) { handler = g_umac_glb_obj->peer_destroy_handler[id]; arg = g_umac_glb_obj->peer_destroy_handler_arg[id]; - if (handler != NULL) + if (handler && + (peer->obj_status[id] == QDF_STATUS_SUCCESS || + peer->obj_status[id] == QDF_STATUS_COMP_ASYNC)) peer->obj_status[id] = handler(peer, arg); else peer->obj_status[id] = QDF_STATUS_COMP_DISABLED; diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj.c index 2d4d8d16c47a..44344af85dc3 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj.c +++ b/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj.c @@ -215,7 +215,9 @@ static QDF_STATUS wlan_objmgr_psoc_obj_destroy(struct wlan_objmgr_psoc *psoc) for (id = 0; id < WLAN_UMAC_MAX_COMPONENTS; id++) { handler = g_umac_glb_obj->psoc_destroy_handler[id]; arg = g_umac_glb_obj->psoc_destroy_handler_arg[id]; - if (handler != NULL) + if (handler && + (psoc->obj_status[id] == QDF_STATUS_SUCCESS || + psoc->obj_status[id] == QDF_STATUS_COMP_ASYNC)) psoc->obj_status[id] = handler(psoc, arg); else psoc->obj_status[id] = QDF_STATUS_COMP_DISABLED; diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c index 84a918604265..f3a8adf50ad9 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c +++ b/umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c @@ -293,7 +293,9 @@ static QDF_STATUS wlan_objmgr_vdev_obj_destroy(struct wlan_objmgr_vdev *vdev) for (id = 0; id < WLAN_UMAC_MAX_COMPONENTS; id++) { handler = g_umac_glb_obj->vdev_destroy_handler[id]; arg = g_umac_glb_obj->vdev_destroy_handler_arg[id]; - if (handler != NULL) + if (handler && + (vdev->obj_status[id] == QDF_STATUS_SUCCESS || + vdev->obj_status[id] == QDF_STATUS_COMP_ASYNC)) vdev->obj_status[id] = handler(vdev, arg); else vdev->obj_status[id] = QDF_STATUS_COMP_DISABLED;