Browse Source

qcacmn: Invoke the objmgr destroy handlers in reverse order of creation

Invoke the object manager destroy handlers in reverse order of creation,
MLME creates the vdev 1st and all the handlers are invoked, during
destroy as well the vdev is deleted 1st and destroy handlers are invoked
later.

Any handlers dependent on the vdev object will have issue, so invoke
the handlers in the reverse order of creation and delete the vdev
last.

Change-Id: Ib15507464f78a436c96a0910e2af0307a3d711fb
CRs-Fixed: 3565425
Arun Kumar Khandavalli 2 năm trước cách đây
mục cha
commit
ca7419851a
1 tập tin đã thay đổi với 3 bổ sung3 xóa
  1. 3 3
      umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c

+ 3 - 3
umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c

@@ -297,7 +297,7 @@ qdf_export_symbol(wlan_objmgr_vdev_obj_create);
 
 static QDF_STATUS wlan_objmgr_vdev_obj_destroy(struct wlan_objmgr_vdev *vdev)
 {
-	uint8_t id;
+	int8_t id;
 	wlan_objmgr_vdev_destroy_handler handler;
 	QDF_STATUS obj_status;
 	void *arg;
@@ -323,8 +323,8 @@ static QDF_STATUS wlan_objmgr_vdev_obj_destroy(struct wlan_objmgr_vdev *vdev)
 	wlan_minidump_remove(vdev, sizeof(*vdev), wlan_vdev_get_psoc(vdev),
 			     WLAN_MD_OBJMGR_VDEV, "wlan_objmgr_vdev");
 
-	/* Invoke registered destroy handlers */
-	for (id = 0; id < WLAN_UMAC_MAX_COMPONENTS; id++) {
+	/* Invoke registered destroy handlers in reverse order of creation */
+	for (id = WLAN_UMAC_COMP_ID_MAX - 1; id >= 0; id--) {
 		handler = g_umac_glb_obj->vdev_destroy_handler[id];
 		arg = g_umac_glb_obj->vdev_destroy_handler_arg[id];
 		if (handler &&