[1/2] batman-adv: Track references of batman_if in set_primary_if
Commit Message
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>
---
I would like to keep that order of hold -> exchange -> put for later
changes (rcu or something like that for primary_if and curr_gw).
batman-adv/hard-interface.c | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
@@ -113,9 +113,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;