From 9e4783cd411395c8c78bcc417a2277c61d1f6856 Mon Sep 17 00:00:00 2001 From: Vivek Date: Thu, 8 Jun 2017 08:33:56 +0530 Subject: [PATCH] qcacmn: Assert when regsiterng second handler for objects create/destroy Assert when there is a second registration for any of the psoc pdev vdev & peer create/destroy handlers. As seen in IR-224607, where there was a second registration for psoc create handler which failed, and the first one was already stored in psoc object, and when psoc was trying to call the first handler we see crash. Change-Id: I7534c7cf2fb9d86329938dcf080362bc719ab582 CRs-Fixed: 2053892 --- .../obj_mgr/src/wlan_objmgr_global_obj.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_global_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_global_obj.c index 41faa1f23825..fa97db289ad0 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_global_obj.c +++ b/umac/cmn_services/obj_mgr/src/wlan_objmgr_global_obj.c @@ -102,6 +102,7 @@ QDF_STATUS wlan_objmgr_register_psoc_create_handler( if (g_umac_glb_obj->psoc_create_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); obj_mgr_err("Callback for comp %d is already registered", id); + QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -128,6 +129,7 @@ QDF_STATUS wlan_objmgr_unregister_psoc_create_handler( if (g_umac_glb_obj->psoc_create_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); obj_mgr_err("Callback for comp %d is not registered", id); + QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -154,6 +156,7 @@ QDF_STATUS wlan_objmgr_register_psoc_destroy_handler( if (g_umac_glb_obj->psoc_destroy_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); obj_mgr_err("Callback for comp %d is already registered", id); + QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -180,6 +183,7 @@ QDF_STATUS wlan_objmgr_unregister_psoc_destroy_handler( if (g_umac_glb_obj->psoc_destroy_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); obj_mgr_err("Callback for comp %d is not registered", id); + QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -257,6 +261,7 @@ QDF_STATUS wlan_objmgr_register_pdev_create_handler( if (g_umac_glb_obj->pdev_create_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); obj_mgr_err("Callback for comp %d is already registered", id); + QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -283,6 +288,7 @@ QDF_STATUS wlan_objmgr_unregister_pdev_create_handler( if (g_umac_glb_obj->pdev_create_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); obj_mgr_err("Callback for comp %d is not registered", id); + QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -309,6 +315,7 @@ QDF_STATUS wlan_objmgr_register_pdev_destroy_handler( if (g_umac_glb_obj->pdev_destroy_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); obj_mgr_err("Callback for comp %d is already registered", id); + QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -335,6 +342,7 @@ QDF_STATUS wlan_objmgr_unregister_pdev_destroy_handler( if (g_umac_glb_obj->pdev_destroy_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); obj_mgr_err("Callback for Component %d is not registered", id); + QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -412,6 +420,7 @@ QDF_STATUS wlan_objmgr_register_vdev_create_handler( if (g_umac_glb_obj->vdev_create_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); obj_mgr_err("Callback for comp %d is already registered", id); + QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -437,6 +446,7 @@ QDF_STATUS wlan_objmgr_unregister_vdev_create_handler( if (g_umac_glb_obj->vdev_create_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); obj_mgr_err("Callback for comp %d is not registered", id); + QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -462,6 +472,7 @@ QDF_STATUS wlan_objmgr_register_vdev_destroy_handler( if (g_umac_glb_obj->vdev_destroy_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); obj_mgr_err("Callback for comp %d is already registered", id); + QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -487,6 +498,7 @@ QDF_STATUS wlan_objmgr_unregister_vdev_destroy_handler( if (g_umac_glb_obj->vdev_destroy_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); obj_mgr_err("Callback for comp %d is not registered", id); + QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -563,6 +575,7 @@ QDF_STATUS wlan_objmgr_register_peer_create_handler( if (g_umac_glb_obj->peer_create_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); obj_mgr_err("Callback for comp %d is already registered", id); + QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -589,6 +602,7 @@ QDF_STATUS wlan_objmgr_unregister_peer_create_handler( if (g_umac_glb_obj->peer_create_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); obj_mgr_err("Callback for comp %d is not registered", id); + QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */ @@ -614,6 +628,7 @@ QDF_STATUS wlan_objmgr_register_peer_destroy_handler( if (g_umac_glb_obj->peer_destroy_handler[id] != NULL) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); obj_mgr_err("Callback for comp %d is already registered", id); + QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } /* Store handler and args in Global object table */ @@ -639,6 +654,7 @@ QDF_STATUS wlan_objmgr_unregister_peer_destroy_handler( if (g_umac_glb_obj->peer_destroy_handler[id] != handler) { qdf_spin_unlock_bh(&g_umac_glb_obj->global_lock); obj_mgr_err("Callback for comp %d is not registered", id); + QDF_ASSERT(0); return QDF_STATUS_E_FAILURE; } /* Reset handlers, and args to NULL */