ソースを参照

qcacld-3.0: Add ref/unref peer calls to be in sync with the peer ref design

Currently, ref/unref peer calls are not in align with the object manager
reference count design.
1 - invoke ref peer on peer create
2 - do unref peer on find peer
3 - do unref peer on peer delete

Add ref/unref peer calls to be in sync with current peer ref count design

Change-Id: Ifc0e6cf95e0a1acb62dbf7858c57044baedf51c6
CRs-Fixed: 1113468
Selvaraj, Sridhar 8 年 前
コミット
d761f25331
1 ファイル変更14 行追加3 行削除
  1. 14 3
      core/hdd/src/wlan_hdd_object_manager.c

+ 14 - 3
core/hdd/src/wlan_hdd_object_manager.c

@@ -152,6 +152,7 @@ int hdd_add_peer_object(struct wlan_objmgr_vdev *vdev,
 			uint8_t *mac_addr)
 {
 	enum wlan_peer_type peer_type;
+	struct wlan_objmgr_peer *peer;
 
 	if ((adapter_mode == QDF_STA_MODE) ||
 		(adapter_mode == QDF_P2P_CLIENT_MODE)) {
@@ -172,9 +173,11 @@ int hdd_add_peer_object(struct wlan_objmgr_vdev *vdev,
 		return -EFAULT;
 	}
 
-	if (!wlan_objmgr_peer_obj_create(vdev, peer_type, mac_addr))
+	peer = wlan_objmgr_peer_obj_create(vdev, peer_type, mac_addr);
+	if (!peer)
 		return -ENOMEM;
 
+	wlan_objmgr_peer_ref_peer(peer);
 	hdd_info("Peer object "MAC_ADDRESS_STR" add success!",
 					MAC_ADDR_ARRAY(mac_addr));
 
@@ -202,8 +205,16 @@ int hdd_remove_peer_object(struct wlan_objmgr_vdev *vdev,
 
 	peer = wlan_objmgr_find_peer(psoc, mac_addr);
 	if (peer) {
-		if (QDF_IS_STATUS_ERROR(wlan_objmgr_peer_obj_delete(peer)))
-			return -EFAULT;
+		/* Unref to decrement ref happened in find_peer */
+		wlan_objmgr_peer_unref_peer(peer);
+
+		/*
+		 * Unref to decrement ref of create_peer. This
+		 * is needed until new ref count implementation
+		 * is done. Object manager will delete peer once
+		 * ref count is 0.
+		 */
+		wlan_objmgr_peer_unref_peer(peer);
 
 		hdd_info("Peer obj "MAC_ADDRESS_STR" deleted",
 				MAC_ADDR_ARRAY(mac_addr));