Browse Source

Staging: batman-adv: Track references of batman_if in set_primary_if

set_primary_if exchanges the current primary interfaces with a new one.
This is a new reference and thus we have to count it and decrease the
count of the old primary interface.

Signed-off-by: Sven Eckelmann <sven.eckelmann@gmx.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Sven Eckelmann 15 years ago
parent
commit
7e8158b341
1 changed files with 8 additions and 0 deletions
  1. 8 0
      drivers/staging/batman-adv/hard-interface.c

+ 8 - 0
drivers/staging/batman-adv/hard-interface.c

@@ -111,9 +111,17 @@ static void set_primary_if(struct bat_priv *bat_priv,
 {
 	struct batman_packet *batman_packet;
 	struct vis_packet *vis_packet;
+	struct batman_if *old_if;
 
+	if (batman_if)
+		hardif_hold(batman_if);
+
+	old_if = bat_priv->primary_if;
 	bat_priv->primary_if = batman_if;
 
+	if (old_if)
+		hardif_put(old_if);
+
 	if (!bat_priv->primary_if)
 		return;